通俗的题意
就是求最大子矩阵的和
卡了一个下午
然后要问出了思路。。。。
枚举行
那么就转化为最大连续子序列和
其实dp是简单的。。主要是没想到枚举
#include<cstdio>
#include<cstring>
#include<algorithm>
//#define DEBUG
using namespace std;
int arr[1005][1005];
int narr[1005];
int dp[1005];
int main(){
int n;
while(~scanf("%d",&n)){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&arr[i][j]);
int ans=arr[1][1];
for(int p=1;p<=n;p++)
for(int q=p;q<=n;q++){
memset(narr,0,sizeof(narr));
for(int i=1;i<=n;i++)
for(int j=p;j<=q;j++)
narr[i]+=arr[i][j];
dp[1]=narr[1];
for(int i=2;i<=n;i++)
dp[i]=max(dp[i-1]+narr[i],narr[i]);
ans=max(ans,*max_element(dp+1,dp+n+1));
}
printf("%d\n",ans);
}
return 0;
}