URAL - 1146
从来不会DP的家伙终于要开始重拾DP了
最大子矩阵没啥好说的,注意单调最大子矩阵不用这么高复杂度,另行更新
#include<bits/stdc++.h>
#define rep(i,j,k) for(int i = j; i <= k; i++)
#define scan(a) scanf("%d",&a)
#define println(a) printf("%lld\n",a)
using namespace std;
const int maxn = 2e2+11;
const int oo = 0x3f3f3f3f;
typedef long long ll;
ll mp[maxn][maxn];
int n,t;
int main(){
while(scan(n)!=EOF){
rep(i,1,n) rep(j,1,n){
scan(t);
mp[i][j]=mp[i][j-1]+t;
}
ll ans=-oo;
rep(i,1,n) rep(j,i,n){//枚举左右界
ll sum=0;
rep(k,1,n){
if(sum>0) sum+=mp[k][j]-mp[k][i-1];
else sum=mp[k][j]-mp[k][i-1];//前面行已无贡献
ans=max(ans,sum);
}
}
println(ans);
}
return 0;
}

浙公网安备 33010602011771号