• 蓝桥杯 历届试题 剪格子


      历届试题 剪格子  
    时间限制:1.0s   内存限制:256.0MB
          
    问题描述
    如下图所示,3 x 3 的格子中填写了一些整数。
    
    +--*--+--+
    |10* 1|52|
    +--****--+
    |20|30* 1|
    *******--+
    | 1| 2| 3|
    +--+--+--+
    我们沿着图中的星号线剪开,得到两个部分,每个部分的数字和都是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
    
     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<algorithm>
     5 #define MAX 0x3f3f3f3f
     6 using namespace std;
     7 
     8 int mp[15][15];
     9 int vis[15][15];
    10 int dir[4][2] = {0,1, 1,0, 0,-1, -1,0};
    11 int n, m;
    12 int ans, tot;
    13 bool check(int x, int y){
    14     if(x<1 || x>n || y<1 || y>m || vis[x][y]) return false;
    15     return true;
    16 }
    17 //(x,y)当前格子, cnt 表示连续格子的个数, sum为cnt个格子内的数字之和 
    18 void dfs(int x, int y, int cnt, int sum){ 
    19     if(sum*2 == tot)
    20         if(ans > cnt) ans = cnt;
    21     if(ans <= cnt) return;
    22     for(int i=0; i<4; ++i){
    23         int xx = x+dir[i][1];
    24         int yy = y+dir[i][0];
    25         if(check(xx, yy)){
    26             vis[xx][yy] = 1;
    27             dfs(xx, yy, cnt+1, sum+mp[xx][yy]);
    28             vis[xx][yy] = 0;
    29         }
    30     }
    31 }
    32 
    33 int main(){
    34     while(scanf("%d%d", &m, &n) != EOF){
    35         tot = 0;
    36         for(int i=1; i<=n; ++i)
    37             for(int j=1; j<=m; ++j)
    38                 scanf("%d", &mp[i][j]), tot+=mp[i][j];
    39         ans = MAX;
    40         vis[1][1] = 1;
    41         dfs(1, 1, 1, mp[1][1]);
    42         if(ans == MAX) ans=0;
    43         printf("%d
    ", ans);
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    Java开发中的一些小技巧
    Java后端WebSocket的Tomcat实现
    Spring事务配置的五种方式 -- 越往后需要Spring版本越高
    Spring事务管理 -- 挺好
    java List 排序 Collections.sort() 对 List 排序
    java List 排序 Collections.sort()
    Java获得文件的创建时间(精确到秒)
    [JSP] c:forEach 输出序号 每行自动生成序号
    Unity3D研究院之在开始学习拓展编辑器
    同样的代码在java和c++中结果不同
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/4356055.html
Copyright © 2020-2023  润新知