最大子矩阵和

https://www.51nod.com/tutorial/course.html#!courseId=8

解题关键:利用最大子序列和,将矩阵预处理一下,就可以将其转化了。

 

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 ll arr[1000][1000];
 5 int main(){
 6     ll n,m,max1=0;
 7     scanf("%lld%lld",&m,&n);
 8     for(ll i=1;i<=n;i++){
 9         for(ll j=1;j<=m;j++){
10             scanf("%lld",&arr[i][j]);
11             arr[i][j]+=arr[i-1][j];
12         }
13     }
14     for(ll i=0;i<n;i++){
15         for(ll j=i+1;j<=n;j++){
16             ll sum=0;
17             for(ll k=1;k<=m;k++){
18                 sum+=arr[j][k]-arr[i][k];
19                 if(sum>max1) max1=sum;
20                 if(sum<0) sum=0;
21             }
22         }
23     }
24     printf("%lld\n",max1);
25 }

 

posted @ 2017-05-10 23:37  Elpsywk  阅读(167)  评论(0编辑  收藏  举报