poj1050(最大子矩陣和)
阿新 • • 發佈:2018-04-30
algorithm int image bsp color const turn amp div
設a[i][j]表示將矩陣壓縮成線性序列的前綴和
那麽我們在做dp時枚舉起點 i 與終點j
最內層枚舉行號,那麽可以一行一行的累加,
最後更新答案即可
#include<cstdio> #include<algorithm> using namespace std; const int nil=-(1<<29); const int maxn=100; int sum[maxn][maxn]; int main(){ int n; scanf("%d",&n); int p; for (int i=1;i<=n;i++){for (int j=1;j<=n;j++){ scanf("%d",&p); sum[i][j]=sum[i][j-1]+p; } } int ans=nil; for (int i=1;i<=n;i++){ for (int j=i;j<=n;j++){ int num=0; for (int k=1;k<=n;k++){ if(num<0) num=0; num+=sum[k][j]-sum[k][i-1]; ans=max(ans,num); } } } printf("%d\n",ans); return 0; }
poj1050(最大子矩陣和)