POJ 1050 To the Max (最大子矩阵和)

题目链接

题意:给定N*N的矩阵,求该矩阵中和最大的子矩阵的和。

题解:把二维转化成一维,算下就好了。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll N=1e3+5;
ll ans=-999999999,tmp,data[N][N],a[N];
int ansi1=0,ansj1=0,ansi2=0,ansj2=0,tmp1=0,tmp2=0,n,m;
int main()
{
    while(scanf("%d",&n)!=EOF){
           m=n; ans=-999999999;
        memset(data,0,sizeof(data));
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++){
                scanf("%lld",&data[i][j]);
                data[i][j]+=data[i-1][j];
            }
        for(int i=1;i<=n;i++)
            for(int k=0;k<i;k++)
        {
            memset(a,0,sizeof(a));
            tmp=0;
            for(int j=1;j<=m;j++){
                a[j]=data[i][j]-data[k][j];
                tmp+=a[j];
                tmp=max(tmp,0LL);
                ans=max(ans,tmp);
            }
        }
        printf("%lld
",ans);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/Ritchie/p/6565218.html