hdu——1081(二维最大连续和)

来源:互联网 发布:评价网络热词 编辑:程序博客网 时间:2024/06/18 06:42

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1081

借鉴地址:http://www.cnblogs.com/gaigai/archive/2012/03/04/2379728.html

解析:其做法相当于间接枚举,得到最大值。因数据量不是很大,所以能过。(15ms)

源代码:

  #include <iostream>
  #define MAX 101
  using namespace std;
  int map[MAX][MAX];
  int main()
 {
     int n, i, j, temp, k;
      
      while(scanf("%d", &n) != EOF)
     {
         memset(map, 0, sizeof(map));
         for(i = 1; i <= n; i++)
             for(j = 1; j <= n; j++)
             {
                 scanf("%d", &temp);
                map[i][j] += map[i][j - 1] + temp;//这里表示第i行的前j列之和
             }
         int max = -100000;
         for(i = 1; i <= n; i++)
             for(j = i; j <= n; j++)
             {
                 int sum = 0;
                 for(k = 1; k <= n; k++)
                 {
                     if(sum < 0)
                         sum = 0;
                     sum += map[k][j] - map[k][i  - 1];//这里表示前k行,i->j列之和
                     if(sum > max)
                         max = sum;
                 }
             }
         printf("%d\n", max);
     }
 return 0;
 }