首页 > 其他 > 详细

【模板】51nod 1051 最大子矩阵和

时间:2018-09-02 00:27:22      阅读:195      评论:0      收藏:0      [点我收藏+]

技术分享图片

【题解】

  二重循环枚举起始列和终止列,竖着往下加,转化为一个最大子段和问题,逐行累加即可。

技术分享图片
 1 #include<cstdio> 
 2 #include<cstring>
 3 #include<algorithm>
 4 #define LL long long
 5 #define N 1000
 6 #define rg register
 7 using namespace std;
 8 int n,m,x;
 9 LL ans,sum[N][N];
10 inline int read(){
11     int k=0,f=1; char c=getchar();
12     while(c<0||c>9)c==-&&(f=-1),c=getchar();
13     while(0<=c&&c<=9)k=k*10+c-0,c=getchar();
14     return k*f;
15 } 
16 int main(){
17     m=read(); n=read();
18     for(rg int i=1;i<=n;i++)
19         for(rg int j=1;j<=m;j++) x=read(),sum[i][j]=sum[i][j-1]+x;
20     for(rg int i=1;i<=m;i++)
21         for(rg int j=i;j<=m;j++){
22             LL tmp=0;
23             for(rg int k=1;k<=n;k++){
24                 tmp+=sum[k][j]-sum[k][i-1];
25                 if(tmp<0) tmp=0;
26                 else ans=max(ans,tmp); 
27             }
28         }
29     printf("%lld\n",ans);
30     return 0;
31 }
View Code

 

【模板】51nod 1051 最大子矩阵和

原文:https://www.cnblogs.com/DriverLao/p/9572039.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!