蓝桥杯 历届试题 剪格子(dfs搜索)
历届试题 剪格子
如下图所示,3 x 3 的格子中填写了一些整数。
- +--*--+--+
- |* ||
- +--****--+
- ||* |
- *******--+
- | | | |
- +--+--+--+
我们沿着图中的星号线剪开,得到两个部分,每个部分的数字和都是60。
本题的要求就是请你编程判定:对给定的m x n 的格子中的整数,是否可以分割为两个部分,使得这两个区域的数字和相等。
如果存在多种解答,请输出包含左上角格子的那个区域包含的格子的最小数目。
如果无法分割,则输出 0。
程序先读入两个整数 m n 用空格分割 (m,n<10)。
表示表格的宽度和高度。
接下来是n行,每行m个正整数,用空格分开。每个整数不大于10000。
10 1 52
20 30 1
1 2 3
1 1 1 1
1 30 80 2
1 1 1 100
- #*#*
- ###*
- ****
没有分成两部分。
另外,这组测试数据
我的代码输出是4,但是正确答案应该是3。
这些情况都没有考虑,但是提交一样正确,由此可见,出题者根本没有考虑那么多,题目描述也不是很严谨。
可以参考这位大神的代码,第十道题,多种情况都考虑了。
- #include <iostream>
- #include <string.h>
- using namespace std;
- int a[][];
- int dx[] = {,,,-};
- int dy[] = {,,-,};
- bool isv[][];
- int M,N,SUM;
- bool judge(int x,int y,int num)
- {
- if( x< || y< || x>N || y>M ) //越界
- return ;
- if( isv[x][y] ) //访问过
- return ;
- if( num + a[x][y] > SUM/ ) //走这一步超过了和的1半
- return ;
- return ;
- }
- int dfs(int x,int y,int num)
- {
- if(num==SUM/){
- return ;
- }
- for(int i=;i<;i++){
- int nx = x + dx[i];
- int ny = y + dy[i];
- if( judge(nx,ny,num) ) //判断
- continue;
- //下一步可以走
- isv[nx][ny] = true;
- int res = dfs(nx,ny,num+a[nx][ny]);
- if(res) //产生结果,直接返回
- return res+;
- isv[nx][ny] = false;
- }
- return ;
- }
- int main()
- {
- while(cin>>M>>N){
- SUM = ;
- for(int i=;i<=N;i++)
- for(int j=;j<=M;j++){
- cin>>a[i][j];
- SUM += a[i][j];
- }
- if( SUM% ){ //和是奇数一定不可以
- cout<<<<endl;
- }
- else{ //和是偶数继续判断
- memset(isv,,sizeof(isv));
- isv[][] = true;
- cout<<dfs(,,a[][])<<endl;
- }
- }
- return ;
- }
Freecode : www.cnblogs.com/yym2013
蓝桥杯 历届试题 剪格子(dfs搜索)的更多相关文章
- 蓝桥杯 历届试题 剪格子 dfs
历届试题 剪格子 时间限制:1.0s 内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20 ...
- 蓝桥杯-历届试题 剪格子(dfs)
历届试题 剪格子 时间限制:1.0s 内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--**** ...
- Java实现 蓝桥杯 历届试题 剪格子
问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+ ...
- 蓝桥杯 历届试题 幸运数 dfs
历届试题 幸运数 时间限制:1.0s 内存限制:256.0MB 问题描述 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的"筛法"生成 . 首先从1开始写出自然数1,2, ...
- 蓝桥杯练习系统历届试题 剪格子 dfs
问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--****--+|20|30* 1|*******--+| 1| 2| 3|+--+--+--+ ...
- 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索
问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...
- 蓝桥杯 历届试题 网络寻路(dfs搜索合法路径计数)
X 国的一个网络使用若干条线路连接若干个节点.节点间的通信是双向的.某重要数据包,为了安全起见,必须恰好被转发两次到达目的地.该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径 ...
- 蓝桥杯 历届试题 约数倍数选卡片 (经典数论+DFS)
闲暇时,福尔摩斯和华生玩一个游戏: 在N张卡片上写有N个整数.两人轮流拿走一张卡片.要求下一个人拿的数字一定是前一个人拿的数字的约数或倍数.例如,某次福尔摩斯拿走的卡片上写着数字“6”,则接下来华生可 ...
- 蓝桥杯历届试题 危险系数(dfs或者并查集求无向图关于两点的割点个数)
Description 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我们来定义一个 ...
随机推荐
- 【Excle数据透视】多列分别分类计数
需求 今天碰到一个很特殊的需求,如下(分别对每一列的值去重并统计个数): 预期结果 实现方法 推荐使用第三种方案,因为不用写公式,比较简单! 方法一:使用countif函数 在单元格J2输入公式COU ...
- 41、java与mysql乱码的问题
解决方法一:(最重要的一种方法)你看下my.ini,有无 [MySQL] default-character-set=utf8 [client] default-character-set=utf8 ...
- 文字选中的js实现
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Loadrunner中影响"响应时间"的设置
1.Runtime setting的设置 *Think time 这个就不多说了,如果忽略则"响应时间"会变短,但同时对服务器的压力增大,从而间接影响响应时间 在anlaysis里 ...
- 使用jquery的 uploadify,在谷歌浏览器上总会崩溃的解决方法
最近做的项目使用了jquery的uploadify,但是在谷歌浏览器测试总是会出现崩溃.如: 因为是java项目. 解决的办法是: 给引入的js加上一个参数,时间戳就可以,防止缓存,使每一次都请求.( ...
- 非super user管理会话
在gp中取消或者中断某个用户的超长时间或者SQL存在问题的会话.假设无法拥有超级用户将无法运行该类操作. 首先我们创建两个用户t1.t2,而且使用t1登录到数据库. [gpadmin@wx60 ~ ...
- 使用PsExec tool在Session 0下运行程序
在Service程序中使用OutputDebugString输出log信息, 在当前用户直接运行DbgView.exe, log信息是不会输出到DbgView窗口的.原因是Server程序运行在Ses ...
- java递归算法实现拼装树形JSON数据
有时候页面需要使用jQuery easy ui中的combotree,需要给combotree提供一个JSON数据,使用如下方法(递归)实现(下面是dao层的实现层): /** * 根据表名和父id拼 ...
- Qt 积累
总结(-) 1> 定时器的使用 QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(u ...
- linux下实现CPU使用率和内存使用率获取方法
想获取一下目标机运行时linux系统的硬件占用情况,写了这几个小程序,以后直接用了. 方法就是读取proc下的文件来获取了. cpu使用率: /proc/stat ,内存使用情况: /p ...