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 ",max1); 25 }