题目描述

一个N×M的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻8个格子中的一个即认为这两个数字相邻),求取出数字和最大是多少。

输入输出格式

输入格式:

输入第1行有一个正整数T,表示了有T组数据。

对于每一组数据,第1行有两个正整数N和M,表示了数字矩阵为N行M列。

接下来N行,每行M个非负整数,描述了这个数字矩阵。

输出格式:

输出包含T行,每行一个非负整数,输出所求得的答案。

输入输出样例

输入样例#1:

  1. 3
  2. 4 4
  3. 67 75 63 10
  4. 29 29 92 14
  5. 21 68 71 56
  6. 8 67 91 25
  7. 2 3
  8. 87 70 85
  9. 10 3 17
  10. 3 3
  11. 1 1 1
  12. 1 99 1
  13. 1 1 1
输出样例#1:

  1. 271
  2. 172
  3. 99

说明

对于第1组数据,取数方式如下:

[67] 75 63 10

29 29 [92] 14

[21] 68 71 56

8 67 [91] 25

对于20%的数据,N, M≤3;

对于40%的数据,N, M≤4;

对于60%的数据,N, M≤5;

对于100%的数据,N, M≤6,T≤20。

————————————————我是分割线————————————————————

  1. /*
  2. Problem:
  3. OJ:
  4. User: S.B.S.
  5. Time:
  6. Memory:
  7. Length:
  8. */
  9. #include<iostream>
  10. #include<cstdio>
  11. #include<cstring>
  12. #include<cmath>
  13. #include<algorithm>
  14. #include<queue>
  15. #include<cstdlib>
  16. #include<iomanip>
  17. #include<cassert>
  18. #include<climits>
  19. #include<functional>
  20. #include<bitset>
  21. #include<vector>
  22. #include<list>
  23. #define F(i,j,k) for(int i=j;i<=k;++i)
  24. #define M(a,b) memset(a,b,sizeof(a))
  25. #define FF(i,j,k) for(int i=j;i>=k;i--)
  26. #define maxn 10001
  27. #define inf 0x3f3f3f3f
  28. #define maxm 4001
  29. #define mod 998244353
  30. //#define LOCAL
  31. using namespace std;
  32. int read(){
  33. int x=,f=;char ch=getchar();
  34. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  35. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  36. return x*f;
  37. }
  38. int n,m;
  39. int ans;
  40. int a[][];
  41. int dx[]={,,,,,,-,-,-},dy[]={,,-,,-,,,,-};//方向增量
  42. int can[][];//表示是否可选
  43. void DFS(int i,int j,int now){//i为行,j为列,now为现值
  44. if(j>m){//列超出,行+1,列归1
  45. i++;
  46. j=;
  47. }
  48. if(i>n){//行超出,更新ans,结束
  49. if(now>ans)ans=now;
  50. return;
  51. }
  52. int k;
  53. if(can[i][j]==){//选
  54. for(k=;k<;k++)can[i+dx[k]][j+dy[k]]++;/*此次不能用bool存储,可能有多重状态*/
  55. DFS(i,j+,now+a[i][j]);
  56. for(k=;k<;k++)can[i+dx[k]][j+dy[k]]--;
  57. }
  58. DFS(i,j+,now);//不选
  59. }
  60. int main(){
  61. int t,i,j;
  62. scanf("%d",&t);
  63. while(t--){
  64. scanf("%d%d",&n,&m);
  65. ans=;
  66. for(i=;i<=n;i++){
  67. for(j=;j<=m;j++)scanf("%d",&a[i][j]);
  68. }
  69. memset(can,,sizeof(can));
  70. DFS(,,);
  71. printf("%d\n",ans);
  72. }
  73. return ;
  74. }

洛谷 P1123 取数游戏的更多相关文章

  1. 洛谷——P1123 取数游戏

    P1123 取数游戏 题目描述 一个N×M的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻8个格子中的一个即认为这两个数字相邻),求取 ...

  2. 洛谷 p1123 取数游戏【dfs】

    题目链接:https://www.luogu.org/problemnew/show/P1123 转载于:>>>>>> 题目描述 一个N×M的由非负整数构成的数字矩 ...

  3. 洛谷P1123取数游戏题解

    题目 这是一道简单的搜索题,考查的还是比较基础的东西,其时搜索有时候并不难写,主要是要想到怎么搜.比如这个题,如果想二维四个方向搜则没有头绪,反之因为搜索是用递归实现的,所以我们可以使用递归的特性,把 ...

  4. 洛谷P1288 取数游戏II(博弈)

    洛谷P1288 取数游戏II 先手必胜的条件需要满足如下中至少 \(1\) 条: 从初始位置向左走到第一个 \(0\) 的位置,经过边的数目为偶数(包含 \(0\) 这条边). 从初始位置向右走到第一 ...

  5. 洛谷P1288 取数游戏II[博弈论]

    题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流 ...

  6. 洛谷P1288 取数游戏II

    题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流 ...

  7. 洛谷1288 取数游戏II

    原题链接 因为保证有\(0\)权边,所以整个游戏实际上就是两条链. 很容易发现当先手距离\(0\)权边有奇数条边,那么必胜. 策略为:每次都将边上权值取光,逼迫后手向\(0\)权边靠拢.若此时后手不取 ...

  8. 洛谷P1288 取数游戏II 题解 博弈论

    题目链接:https://www.luogu.org/problem/P1288 首先,如果你的一边的边是 \(0\) ,那么你肯定走另一边. 那么你走另一边绝对不能让这条边有剩余,因为这条边有剩余的 ...

  9. 洛谷 P1288 取数游戏II

    奇奇怪怪的游戏,不多写了 #include<cstdio> ]; int main() { int i; scanf("%d",&n); ;i<=n;i+ ...

随机推荐

  1. mybatis generator修改默认生成的sql模板

    相关连接: mybatis-generator扩展教程系列 -- 自定义sql xml文件 git项目地址

  2. Java基础组件快速入门

    最近需要上线很多新的JAVA项目,然而很多JAVA的相关库都不太熟悉,项目实现起来遇到了不小阻力,熬了好几天夜.现在手头的工作基本完成了,因此打算好好来归纳下java的相关工具库,将来需要借助你们,好 ...

  3. java中关于锁知识的整理

    1.1什么是锁? 在计算机科学中,锁(lock)或互斥(mutex)是一种同步机制,用于在有许多执行线程的环境中强制对资源的访问限制.锁旨在强制实施互斥排他.并发控制策略. 锁通常需要硬件支持才能有效 ...

  4. HDU 5628 Clarke and math dp+数学

    Clarke and math 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5628 Description Clarke is a patient ...

  5. PHP 从基础开始 ——重要知识点笔记

    PHP static 关键词 通常,当函数完成/执行后,会删除所有变量.不过,有时我需要不删除某个局部变量.实现这一点需要更进一步的工作. 要完成这一点,请在您首次声明变量时使用 static 关键词 ...

  6. css实现背景图片模糊

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Linux——线程

    线程 我们都知道一个程序的执行是由进程来完成的,而进程里真正执行代码却是由线程来完成,它是真正的执行流.通常将一个程序⾥里一个执行路线就叫做线程(thread).对它更准确的定义是:线程是“一个进程内 ...

  8. centos 7 安装 rvm 超时

    关于 rvm  建议没有变成基础的朋友不要选择这种方式安装   不然很有可能到 对ruby很感兴趣想学到放弃的 因为ruby实在是太麻烦 太麻烦  你会遇到各种各样的问题   我之前安装过一次rvm ...

  9. FireDAC 下的 Sqlite [11] - 关于批量提交 SQL 命令的测试

    可把下面代码直接贴在空白窗体上, 以快速完成窗体设计: object DBGrid1: TDBGrid Left = 0 Top = 0 Width = 265 Height = 338 Align ...

  10. Android app开发中用户协议(使用条款)文字自己主动换行

    用户协议(使用条款)文字自己主动换行处理 转载请注明出处:http://blog.csdn.net/u012301841/article/details/46648821 我们在开发app的时候.常常 ...