poj 1050 To the Max_dp求最大子矩阵和
题意:求最大子矩阵和
利用dp[i]每次向下更新,构成竖起的单条矩阵,再按不小于零就加起来来更新,构成更大的矩阵
#include <iostream> #include<cstdio> #include<cstring> using namespace std; #define N 110 int map[N][N],dp[N]; int main(int argc, char** argv) { int n,i,j,k,maxn,ans; while(scanf("%d",&n)!=EOF){ ans=-9999999; for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&map[i][j]); for(i=0;i<n;i++){ memset(dp,0,sizeof(dp)); for(j=i;j<n;j++){ for(k=0;k<n;k++){ dp[k]+=map[j][k]; } maxn=-1; for(k=0;k<n;k++){ maxn=maxn<0?dp[k]:maxn+dp[k]; if(maxn>ans) ans=maxn; } } } printf("%d\n",ans); } return 0; }
不怕路长,只怕心老.