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\n",ans); } return 0; }