zoukankan      html  css  js  c++  java
  • 历届试题 剪格子

    问题描述

    如下图所示,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
     
    这个题就是一个dfs 我一开始想错了 从每个点开始向右或者向下走 
    其实就是遍历上下左右就可以了
     1 import java.util.Scanner;
     2 
     3 public class A {
     4     static int[][] map;
     5     static int sum = 0;
     6     static int n, m;
     7     static int out = 987654321;
     8     static int stepNum = 987654321;
     9     static int[][] vis;
    10 
    11     public static void main(String[] args) {
    12         Scanner sc = new Scanner(System.in);
    13         m = sc.nextInt();
    14         n = sc.nextInt();
    15         map = new int[n][m];
    16         vis = new int[n][m];
    17         for (int i = 0; i < n; i++) {
    18             for (int j = 0; j < m; j++) {
    19                 map[i][j] = sc.nextInt();
    20                 sum += map[i][j];
    21             }
    22         }
    23         sum /= 2;
    24         dfs(0, 0, 0, 1);
    25         System.out.println(stepNum);
    26     }
    27 
    28     public static void dfs(int row, int col, int res, int step) {
    29         if (row >= n || col >= m || row < 0 || col < 0) {
    30             return;
    31         }
    32         if (vis[row][col] == 1) {
    33             return;
    34         }
    35         if (res > sum) {
    36             return;
    37         }
    38         vis[row][col] = 1;
    39         res += map[row][col];
    40         if (res == sum) {
    41             int num = step;
    42             int flag = 0;
    43             stepNum = stepNum < num ? stepNum : num;
    44         }
    45         dfs(row + 1, col, res, step + 1);
    46         dfs(row - 1, col, res, step + 1);
    47         dfs(row, col - 1, res, step + 1);
    48         dfs(row, col + 1, res, step + 1);
    49         vis[row][col] = 0;
    50     }
    51 
    52 }
  • 相关阅读:
    Invalid bound statement (not found)解决方法
    MySQL的sum()函数
    关于Mybatis的java.lang.UnsupportedOperationException异常处理
    博客迁移
    Building Blog(个性化博客)2
    走一波服务器
    JZ高中OJ 1036. [SCOI2009]迷路
    JZ初中OJ 2296. [noip普及组2]神殿
    JZ初中OJ 2295. [noip普及组2]栈
    JZ初中OJ 2298. [noip普及组2]异或
  • 原文地址:https://www.cnblogs.com/16crow/p/6657762.html
Copyright © 2011-2022 走看看