HDU 1081 To The Max

题意:求N* N 矩阵中最大和子矩阵

思路:输入的时候,a[i][j]存前i行第j列的和,将i到j之间数的和看成一个数字,计算i到j行之间k列的和


#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#define N 500
using namespace std;
int a[N][N];
int dp[N][N];

int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            scanf("%d",&a[i][j]);
            a[i][j]+=a[i-1][j];
        }

       int max=0;
       for(int i=1;i<=n;i++)
       {
           for(int j=i+1;j<=n;j++)
           {
              int sum=0;
              for(int k=1;k<=n;k++)
              {
                  int t=a[j][k]-a[i-1][k];
                  sum+=t;
                  if(sum>max)
                  max=sum;
                  if(sum<0)
                  sum=0;
              }
           }
       }
       printf("%d\n",max);
    }
    return 0;
}


你可能感兴趣的:(HDU 1081 To The Max)