剪格子
来源:互联网 发布:js特殊字符转义 编辑:程序博客网 时间:2024/04/28 21:54
如图p1.jpg所示,3 x 3的格子中填写了一些整数。
我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是60。
本题的要求就是请你编程判定:对给定的m x n的格子中的整数,是否可以分割为两个部分,使得这两个区域的数字和相等。
如果存在多种解答,请输出包含左上角格子的那个区域包含的格子的最小数目。
如果无法分割,则输出 0
程序输入输出格式要求:
程序先读入两个整数 m n 用空格分割(m,n<10)
表示表格的宽度和高度
接下来是n行,每行m个正整数,用空格分开。每个整数不大于10000
程序输出:在所有解中,包含左上角的分割区可能包含的最小的格子数目。
例如:
用户输入:
3 3
10 152
20 301
1 2 3
则程序输出:
3
再例如:
用户输入:
4 3
1 1 11
1 3080 2
1 1 1100
则程序输出:
10
(参见p2.jpg)
资源约定:
峰值内存消耗< 64M
CPU消耗 < 5000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...”的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中#include <xxx>, 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
#include <stdio.h>#include<stdlib.h>int**a,**b,sum,m,n,x;void backtrack(int i,int j){int k,h;if(i<0||j<0||i>=m||j>=n||b[i][j]||sum<0)return;if(sum==0){x=0;for(k=0;k<m;k++){for(h=0;h<n;h++){if(b[k][h]==b[0][0]){x++;}}}printf("%d\n",x);exit(0);}else{sum-=a[i][j];b[i][j]=1;backtrack(i,j-1);backtrack(i-1,j);backtrack(i,j+1);backtrack(i+1,j);sum+=a[i][j];b[i][j]=0;}}int main(int argc, char* argv[]){int i,j;scanf("%d%d",&m,&n);a=(int**)malloc(sizeof(int*)*m);b=(int**)malloc(sizeof(int*)*m);sum=0;for(i=0;i<m;i++){a[i]=(int*)malloc(sizeof(int)*n);b[i]=(int*)malloc(sizeof(int)*n);for(j=0;j<n;j++){b[i][j]=0;scanf("%d",a[i]+j);sum+=a[i][j];}} sum/=2;for(i=0;i<m;i++)for(j=0;j<n;j++)backtrack(i,j);return 0;}
测试结果:
0 0
- 剪格子
- 剪格子
- 剪格子
- 剪格子
- 剪格子
- 剪格子
- 剪格子
- 剪格子
- 剪格子
- 剪格子
- 剪格子
- 剪格子
- 剪格子
- 剪格子
- 第四届蓝桥杯--剪格子
- 历届试题 剪格子
- 历届试题 剪格子
- 蓝桥杯 剪格子
- 面向对象设计原则
- 数据区,代码区,堆栈区,操作系统堆栈
- QT4 编译错误 error: collect2: ld returned 1 exit status
- 一道面试题,100个人围成一个圈,然后报数。
- Oracle数据库中NUMBER(x,y)数据类型详解
- 剪格子
- CTCI---8.1.2
- Error:Android Pre Dex: [android-support-v4.jar] at com.intellij.rt.execution.CommandLineWrapper.main
- Windows平台安装Beautiful Soup
- [150521]线程的同步和异步
- mysql中的触发器
- 造 X-Forwarded-For
- MTK屏幕闪屏如何Debug
- 泛型学习