历届试题 剪格子

时间限制:1.0s   内存限制:256.0MB
问题描述

如下图所示,3 x 3 的格子中填写了一些整数。

  1. +--*--+--+
  2. |* ||
  3. +--****--+
  4. ||* |
  5. *******--+
  6. | | | |
  7. +--+--+--+

我们沿着图中的星号线剪开,得到两个部分,每个部分的数字和都是60。

本题的要求就是请你编程判定:对给定的m x n 的格子中的整数,是否可以分割为两个部分,使得这两个区域的数字和相等。

如果存在多种解答,请输出包含左上角格子的那个区域包含的格子的最小数目。

如果无法分割,则输出 0。

输入格式

程序先读入两个整数 m n 用空格分割 (m,n<10)。

表示表格的宽度和高度。

接下来是n行,每行m个正整数,用空格分开。每个整数不大于10000。

输出格式
输出一个整数,表示在所有解中,包含左上角的分割区可能包含的最小的格子数目。
样例输入1
3 3
10 1 52
20 30 1
1 2 3
样例输出1
3
样例输入2
4 3
1 1 1 1
1 30 80 2
1 1 1 100
样例输出2
10

  
  dfs搜索题。
  按深度优先搜索的思路从左上角开始搜索,累加当前数字,直到数字和为所有数字和的一半,返回走到当前的步数。
  需要注意的是,输入行数和列数的时候注意输入顺序。我之前做过的这种类型的题,都是先输入行数再输入列数,而这道题却是先输入列数再输入行数。这着实坑到我了,调了好久才找到原因。
  另外这道题的测试数据应该很弱,其实这道题应该考虑多种情况,像“最小”的格子数,如何判断剪下的正好是一半。
  如:
  1. #*#*
  2. ###*
  3. ****

没有分成两部分。

另外,这组测试数据

  1.  

我的代码输出是4,但是正确答案应该是3。

这些情况都没有考虑,但是提交一样正确,由此可见,出题者根本没有考虑那么多,题目描述也不是很严谨。

可以参考这位大神的代码,第十道题,多种情况都考虑了。

2013蓝桥杯初赛c语言专科组--题目与答案

 
  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;
  4. int a[][];
  5. int dx[] = {,,,-};
  6. int dy[] = {,,-,};
  7. bool isv[][];
  8. int M,N,SUM;
  9. bool judge(int x,int y,int num)
  10. {
  11. if( x< || y< || x>N || y>M ) //越界
  12. return ;
  13. if( isv[x][y] ) //访问过
  14. return ;
  15. if( num + a[x][y] > SUM/ ) //走这一步超过了和的1半
  16. return ;
  17. return ;
  18. }
  19. int dfs(int x,int y,int num)
  20. {
  21. if(num==SUM/){
  22. return ;
  23. }
  24. for(int i=;i<;i++){
  25. int nx = x + dx[i];
  26. int ny = y + dy[i];
  27. if( judge(nx,ny,num) ) //判断
  28. continue;
  29. //下一步可以走
  30. isv[nx][ny] = true;
  31. int res = dfs(nx,ny,num+a[nx][ny]);
  32. if(res) //产生结果,直接返回
  33. return res+;
  34. isv[nx][ny] = false;
  35. }
  36. return ;
  37. }
  38. int main()
  39. {
  40. while(cin>>M>>N){
  41. SUM = ;
  42. for(int i=;i<=N;i++)
  43. for(int j=;j<=M;j++){
  44. cin>>a[i][j];
  45. SUM += a[i][j];
  46. }
  47. if( SUM% ){ //和是奇数一定不可以
  48. cout<<<<endl;
  49. }
  50. else{ //和是偶数继续判断
  51. memset(isv,,sizeof(isv));
  52. isv[][] = true;
  53. cout<<dfs(,,a[][])<<endl;
  54. }
  55. }
  56. return ;
  57. }

Freecode : www.cnblogs.com/yym2013

蓝桥杯 历届试题 剪格子(dfs搜索)的更多相关文章

  1. 蓝桥杯  历届试题 剪格子  dfs

    历届试题 剪格子 时间限制:1.0s   内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20 ...

  2. 蓝桥杯-历届试题 剪格子(dfs)

    历届试题 剪格子   时间限制:1.0s   内存限制:256.0MB        问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--**** ...

  3. Java实现 蓝桥杯 历届试题 剪格子

    问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+ ...

  4. 蓝桥杯  历届试题 幸运数  dfs

    历届试题 幸运数 时间限制:1.0s   内存限制:256.0MB 问题描述 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的"筛法"生成 . 首先从1开始写出自然数1,2, ...

  5. 蓝桥杯练习系统历届试题 剪格子 dfs

    问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--****--+|20|30* 1|*******--+| 1| 2| 3|+--+--+--+ ...

  6. 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索

    问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

  7. 蓝桥杯 历届试题 网络寻路(dfs搜索合法路径计数)

    X 国的一个网络使用若干条线路连接若干个节点.节点间的通信是双向的.某重要数据包,为了安全起见,必须恰好被转发两次到达目的地.该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径 ...

  8. 蓝桥杯 历届试题 约数倍数选卡片 (经典数论+DFS)

    闲暇时,福尔摩斯和华生玩一个游戏: 在N张卡片上写有N个整数.两人轮流拿走一张卡片.要求下一个人拿的数字一定是前一个人拿的数字的约数或倍数.例如,某次福尔摩斯拿走的卡片上写着数字“6”,则接下来华生可 ...

  9. 蓝桥杯历届试题 危险系数(dfs或者并查集求无向图关于两点的割点个数)

    Description 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我们来定义一个 ...

随机推荐

  1. 【Excle数据透视】多列分别分类计数

    需求 今天碰到一个很特殊的需求,如下(分别对每一列的值去重并统计个数): 预期结果 实现方法 推荐使用第三种方案,因为不用写公式,比较简单! 方法一:使用countif函数 在单元格J2输入公式COU ...

  2. 41、java与mysql乱码的问题

    解决方法一:(最重要的一种方法)你看下my.ini,有无 [MySQL] default-character-set=utf8 [client] default-character-set=utf8 ...

  3. 文字选中的js实现

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. Loadrunner中影响"响应时间"的设置

    1.Runtime setting的设置 *Think time 这个就不多说了,如果忽略则"响应时间"会变短,但同时对服务器的压力增大,从而间接影响响应时间 在anlaysis里 ...

  5. 使用jquery的 uploadify,在谷歌浏览器上总会崩溃的解决方法

    最近做的项目使用了jquery的uploadify,但是在谷歌浏览器测试总是会出现崩溃.如: 因为是java项目. 解决的办法是: 给引入的js加上一个参数,时间戳就可以,防止缓存,使每一次都请求.( ...

  6. 非super user管理会话

    在gp中取消或者中断某个用户的超长时间或者SQL存在问题的会话.假设无法拥有超级用户将无法运行该类操作.   首先我们创建两个用户t1.t2,而且使用t1登录到数据库. [gpadmin@wx60 ~ ...

  7. 使用PsExec tool在Session 0下运行程序

    在Service程序中使用OutputDebugString输出log信息, 在当前用户直接运行DbgView.exe, log信息是不会输出到DbgView窗口的.原因是Server程序运行在Ses ...

  8. java递归算法实现拼装树形JSON数据

    有时候页面需要使用jQuery easy ui中的combotree,需要给combotree提供一个JSON数据,使用如下方法(递归)实现(下面是dao层的实现层): /** * 根据表名和父id拼 ...

  9. Qt 积累

    总结(-) 1> 定时器的使用 QTimer *timer = new QTimer(this);  connect(timer, SIGNAL(timeout()), this, SLOT(u ...

  10. linux下实现CPU使用率和内存使用率获取方法

    想获取一下目标机运行时linux系统的硬件占用情况,写了这几个小程序,以后直接用了. 方法就是读取proc下的文件来获取了. cpu使用率:    /proc/stat ,内存使用情况:     /p ...