1. 程式人生 > >poj1050(最大子矩陣和)

poj1050(最大子矩陣和)

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(最大子矩陣和)