HDU 1081 To The Max

来源:互联网 发布:visio是什么软件 编辑:程序博客网 时间:2024/05/16 01:10

题意:求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 500using 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;}


0 0
原创粉丝点击