当前位置: 首页 > article >正文

[洛谷]P1123 取数游戏

最近准备蓝桥杯 一直在练搜索和图论hhh

题意

给定 n × m n \times m n×m的数字矩阵
可以取出若干数字
但是有限制 取出的两个数字不能在八联通方向上相邻


数据范围

1 ≤ N , M ≤ 6 , 1 ≤ T ≤ 20 1≤N,M≤6,1≤T≤20 1N,M61T20

思路

遍历方式

这道题的dfs方式对我来说是第一次接触
学到很多

本题采取遍历矩阵中的行优先的方式
可以理解为把下面这段常见的双重循环遍历拆成dfs中的坐标一步一步加减

for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)

也就是对于每一行(每一个 x x x)
先把这一行的每一列走完 (先 y y y++)
然后再把 x x x++

如何保证八联通内不相邻?

定义一个别样的 v i s vis vis数组 i n t int int 类型
用来记录 ( i , j ) (i,j) (i,j)这个点八联通范围内有多少个点被选过


如果vis[i][j]==0 对于这个点可以有选和不选两种操作

Code

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define pii pair<int,int>
#define ar2 array<int,2>
#define ar3 array<int,3>
#define ar4 array<int,4>
#define endl '\n'
void cmax(int &a,int b){a=max(a,b);}
void cmin(int &a,int b){a=min(a,b);}
const int N=20,MOD=1e9+7,INF=0x3f3f3f3f,LINF=LLONG_MAX;
int dx[]={1,1,1,0,0,-1,-1,-1};
int dy[]={1,-1,0,1,-1,0,1,-1};int n,m,g[N][N];
int vis[N][N];
int ans=0;void dfs(int x,int y,int sum){if(y==m+1){cmax(ans,sum);dfs(x+1,1,sum);return;}if(x==n+1){cmax(ans,sum);return;}//不选dfs(x,y+1,sum);if(vis[x][y]==0) {//选// vis[x][y]=1;for(int i=0;i<8;i++){int tx=x+dx[i],ty=y+dy[i];if(tx<1||tx>n||ty<1||ty>m) continue;vis[tx][ty]++;}dfs(x,y+1,sum+g[x][y]);// vis[x][y]=0;for(int i=0;i<8;i++){int tx=x+dx[i],ty=y+dy[i];if(tx<1||tx>n||ty<1||ty>m) continue;vis[tx][ty]--;}}
}void solve() {memset(vis,0,sizeof vis);memset(g,0,sizeof g);ans=0;cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>g[i][j];}}dfs(1,1,0);cout<<ans<<endl;}signed main() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int t=1;cin>>t;while (t--) solve();}

代码细节

  • dfs中 在最前面判断完x和y之后
    不要单独判断vis[x][y]==1
if(vis[x][y]){dfs(x,y+1,sum);return;
}

要判断的话就要写成这样 里面会多一次dfs
然后在这个判断过后 再分类讨论选或不选
这样会多很多次递归 会tle

  • 所以要写成上面code这样
  • 先走不选这个dfs 因为无论这个点能不能选 不选这个选项肯定要走一次的
  • 然后也不要判断vis[x][y]!=0 因为会多一次dfs
  • 直接判断vis[x][y]==0 然后 后面写选这个点的情况
	//不选dfs(x,y+1,sum);if(vis[x][y]==0) {//选for(int i=0;i<8;i++){int tx=x+dx[i],ty=y+dy[i];if(tx<1||tx>n||ty<1||ty>m) continue;vis[tx][ty]++;}dfs(x,y+1,sum+g[x][y]);for(int i=0;i<8;i++){int tx=x+dx[i],ty=y+dy[i];if(tx<1||tx>n||ty<1||ty>m) continue;vis[tx][ty]--;}

这样就能减少递归次数
记得回溯

原来错的细节

  • 我一开始把 ( i , j ) (i,j) (i,j)选上后 就把这一块九个点的vis都记为true 然后在dfs中 如果vis[x][y]==1 就更新ans 然后return 并且写了一个check函数 检查这个点八联通范围内有没有vis为true的点 如果有就跳过这个点

  • 这是完全错误的 因为一个点没选 但是它左边的点选了 这个点也会 v i s = = t r u e vis==true vis==true 那么它右边这个点就会因为它的 v i s = = t r u e vis==true vis==true而被跳过

  • 还有 碰到 v i s [ x ] [ y ] = = 1 vis[x][y]==1 vis[x][y]==1时 不应该直接更新ans并且return 因为vis[x][y]==1只代表这个点不能走 不能直接return 应该再找其他的点dfs 然后再return

相关文章:

[洛谷]P1123 取数游戏

最近准备蓝桥杯 一直在练搜索和图论hhh 题意 给定 n m n \times m nm的数字矩阵 可以取出若干数字 但是有限制 取出的两个数字不能在八联通方向上相邻 数据范围 1 ≤ N , M ≤ 6 &#xff0c; 1 ≤ T ≤ 20 1≤N,M≤6&#xff0c;1≤T≤20 1≤N,M≤6&#xff0c;1≤T≤20 思…...

DeepSeek 多模态大模型 Janus-Pro 本地部署教程

下载模型仓库 git clone https://github.com/deepseek-ai/Janus.git 国内下载仓库失败时&#xff0c;可以使用以下代理&#xff1a; git clone https://github.moeyy.xyz/https://github.com/deepseek-ai/Janus.git 准备 Conda 3.12 虚拟环境 conda create --name deepseek7B p…...

【prompt实战】知乎问题解答专家

本文原创作者&#xff1a;姚瑞南 AI-agent 大模型运营专家&#xff0c;先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗&#xff1b;多年人工智能行业智能产品运营及大模型落地经验&#xff0c;拥有AI外呼方向国家专利与PMP项目管理证书。&#xff08;转载需经授权&am…...

6. MySQL 索引的数据结构(详细说明)

6. MySQL 索引的数据结构(详细说明) 文章目录 6. MySQL 索引的数据结构(详细说明)1. 为什么使用索引2. 索引及其优缺点2.1 索引概述 3. InnoDB中索引的推演3.1 索引之前的查找3.2 设计索引3.3 常见索引概念1. 聚簇索引2. 二级索引&#xff08;辅助索引、非聚簇索引&#xff09;…...

pytorch 50 大模型导出的onnx模型优化尝试

本博文基于Native-LLM-for-Android项目代码实现,具体做了以下操作: 1、尝试并实现将模型结构与权重零散的onnx模型进行合并,通过该操作实现了模型加载速度提升,大约提升了3倍 2、突破了onnxconverter_common 无法将llm模型导出为fp16的操作,基于该操作后将10g的权重降低到…...

LeetCode1871 跳跃游戏VII

LeetCode 跳跃游戏 IV&#xff1a;二进制字符串的跳跃问题 题目描述 给定一个下标从 0 开始的二进制字符串 s 和两个整数 minJump 和 maxJump。初始时&#xff0c;你位于下标 0 处&#xff08;保证该位置为 0&#xff09;。你需要判断是否能到达字符串的最后一个位置&#xf…...

RabbitMQ 从入门到精通

1 MQ架构设计原理 1.1 什么是消息中间件 消息中间件基于队列模型实现异步/同步传输数据 作用&#xff1a;可以实现支撑高并发、异步解耦、流量削峰、降低耦合度。 1.2 传统的http请求存在那些缺点 1.Http请求基于请求与响应的模型&#xff0c;在高并发的情况下&#xff0c…...

考研复试c语言常见问答题汇总2

11. 关键字和一般标识符有什么不同&#xff1f; C语言中关键字与一般标识符区别&#xff1a; 定义&#xff1a;关键字是C语言预定义的特殊单词&#xff08;如int、for&#xff09;&#xff0c;有固定含义&#xff1b;标识符是自定义的名称&#xff08;如变量名、函数名&#xf…...

Qt表格美化笔记

介绍 表格是一种常见的数据管理界面形式&#xff0c;在大批量的数据交互情形下使用的比较多 表格 可以通过样式表设置线条以及边框的颜色 QTableWidget { gridline-color : rgb(55, 60, 62); border: 1px solid rgb(62,112,181);}表头 如果表头和第一行的分割线显示&#…...

致远互联FE协作办公平台 存在SQL注入漏洞(DVB-2025-8942)

免责声明 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x01…...

一、docker的安装

一、docker桌面 二、docker的配置文件 1、docker配置文件位置/etc/docker/daemon.json 使用json格式&#xff0c;graphdata-root {"graph":"/deploy/docker","registry-mirrors": ["https://8auvmfwy.mirror.aliyuncs.com"],"…...

『PostgreSQL』PGSQL备份与还原实操指南

&#x1f4e3;读完这篇文章里你能收获到 了解逻辑备份与物理备份的区别及适用场景&#x1f50d;。掌握全库、指定库、指定表备份还原的命令及参数&#x1f4dd;。学会如何根据业务需求选择合适的备份策略&#x1f4ca;。熟悉常见备份还原问题的排查与解决方法&#x1f527;。 …...

Redis 主从复制详解:实现高可用与数据备份

目录 引言 1. 什么是 Redis 主从复制&#xff1f; 1.1 定义 1.2 核心概念 2. Redis 主从复制的工作原理 2.1 复制流程 2.2 复制流程图 3. Redis 主从复制的配置方法 3.1 通过配置文件配置 主节点配置 从节点配置 3.2 通过命令行配置 设置从节点 取消从节点 4. Re…...

facebook游戏投广:提高广告关键数据的方法

在当今竞争激烈的数字营销领域&#xff0c;游戏广告的投放效果直接关系到游戏公司的市场表现和盈利能力。然而&#xff0c;许多游戏公司在广告投放上面临着诸多挑战&#xff0c;如高昂的成本、低效的转化率以及难以追踪的效果。那么&#xff0c;如何才能通过数据分析真正提升游…...

HybridCLR Generate All 报错UnityLinker.exe

现象&#xff1a; Generate All 报错 Building Library\Bee\artifacts\Android\ManagedStripped failed with output: E:\XingJiKongLong\HybridCLRData\LocalIl2CppData-WindowsEditor\il2cpp\build\deploy\UnityLinker.exe Library\Bee\artifacts\rsp\10776760506222613018.…...

大一新生备战蓝桥杯c/c++B组——2024年省赛真题解题+心得分享

一&#xff0c;握手问题 这个题用点像小学奥数&#xff0c;直接手算就行 答案&#xff1a;1204 二&#xff0c;小球反弹 这个题思路简单&#xff0c;但是运行会显示超时。在思考思考&#xff0c;后续补代码。 三&#xff0c;好数 思路一&#xff1a; #include <iostream&…...

【Java】——数据类型和变量

个人主页&#xff1a;User_芊芊君子 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录&#xff1a; 1.Java中的注释1.1.基本规则1.2.注释规范 2.标识符3.关键字4.字面常量5.数据类型6.变量6.1变量的概念6.2语法6.3整型变量6.3.1整型变量6.3.2长整…...

docker 安装常用镜像

我们在上篇文章中已经修改了daemon.json 安装镜像时如果search超时就直接pull 安装mysql docker pull mysql:5.7 启动命令 docker run --name mysql-docker -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot1234 -d mysql:5.7 ocker run&#xff1a;运行docker容器命令 --name my…...

SpringMVC 基本概念与代码示例

1. SpringMVC 简介 SpringMVC 是 Spring 框架中的一个 Web 层框架&#xff0c;基于 MVC&#xff08;Model-View-Controller&#xff09; 设计模式&#xff0c;提供了清晰的分层结构&#xff0c;适用于 Web 应用开发 SpringMVC 主要组件 DispatcherServlet&#xff08;前端控…...

MKS HA-MFV:半导体制造中的高精度流量验证技术解析

引言 在半导体先进制程&#xff08;如3nm节点&#xff09;中&#xff0c;工艺气体流量的精准控制直接决定刻蚀、沉积等关键步骤的均匀性和良率。MKS Instruments推出的 HA-MFV&#xff08;High Accuracy Mass Flow Verifier&#xff09; 通过创新设计解决了传统流量验证技术的…...

版本号标识

Visual Studio 16 2019 是 Microsoft Visual Studio 2019 的版本号标识。具体来说&#xff1a; Visual Studio 是微软提供的一款集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于开发各种应用程序&#xff0c;如桌面软件、Web 应用、移动应用等&#xff0c;支持多种编…...

基于Python实现手写数字识别

KNN实验——手写数字识别 实验目的&#xff1a; 实验内容&#xff1a; 实现最基本的KNN算法&#xff0c;使用trainingDigits文件夹下的数据&#xff0c;对testDigits中的数据进行预测。&#xff08;K赋值为1&#xff0c;使用欧氏距离&#xff0c;多数投票决定分类结果&#…...

shell的模拟实现 ─── linux第16课

目录 第一版只能维护命令行参数表创建子进程, 执行非内建命令 第一版的执行结果: 第二版能维护命令行参数表执行cd命令 ,判断了是否是自建命令(mysell自己执行自建命令,可以对环境变量发生改变),子进程执行其他命令. 第二版执行结果: 第三版 模拟真实shell从系统文件中获取环…...

游戏引擎学习第153天

仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾 目前正在进行的是一个比较大的系统调整&#xff0c;原本预计今天会继续深入这个改动&#xff0c;但实际上在昨天的开发中&#xff0c;我们已经完成了大部分的代码编写&#xff0c;并且运行之后几乎一切都能正常工作&#x…...

理解C语言中的extern关键字

在C语言编程中&#xff0c;extern关键字是一个非常重要的概念&#xff0c;尤其在多文件编程和全局变量的使用中。本文将详细解释extern的作用、用法以及常见的应用场景。 1. extern关键字的作用 extern关键字用于声明一个变量或函数是在其他文件中定义的。它告诉编译器&#x…...

【MyBatis Plus 逻辑删除详解】

文章目录 MyBatis Plus 逻辑删除详解前言什么是逻辑删除&#xff1f;MyBatis Plus 中的逻辑删除1. 添加逻辑删除字段2. 实体类的配置3. 配置 MyBatis Plus4. 使用逻辑删除5. 查询逻辑删除的记录 MyBatis Plus 逻辑删除详解 前言 MyBatis Plus 是一个强大的持久化框架&#xf…...

latex问题汇总

latex问题汇总 环境问题1 环境 texlive2024 TeXstudio 4.8.6 (git 4.8.6) 问题1 编译过程有如下错 ! Misplaced alignment tab character &. l.173 International Conference on Infrared &Millimeter Waves, 2004: 667--... I cant figure out why you would wa…...

基于Redis实现限流

限流尽可能在满足需求的情况下越简单越好&#xff01; 1、基于Redsi的increment方法实现固定窗口限流 Redis的increment方法保证并发线程安全窗口尽可能越小越好(太大可能某一小段时间就打满请求剩下的都拿不到令牌了)这个原理其实就是用当前时间戳然后除窗口大小 在这个窗口大…...

力扣练习之确定两个字符串是否接近

目录 题目&#xff1a; 题解&#xff1a; 详细题解 题目&#xff1a; 如果可以使用以下操作从一个字符串得到另一个字符串&#xff0c;则认为两个字符串 接近 &#xff1a; 操作 1&#xff1a;交换任意两个 现有 字符。 例如&#xff0c;abcde -> aecdb 操作 2&#xff1…...

大三下找C++开发实习的感受分享

目录 找实习的过程 阶段一&#xff1a;投简历 阶段二&#xff1a;准备面试 阶段三&#xff1a;面试中 阶段四&#xff1a;面试结束后 面试真题 总结 找实习的过程 阶段一&#xff1a;投简历 第一次找实习还是使用BOSS这个软件进行投简历&#xff0c;这个过程其实挺难说…...