Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

http://acm.hdu.edu.cn/showproblem.php?pid=1081

求子矩阵最大的和

二维转一维

View Code
 1 #include <cstdio>
 2 using namespace std;
 3 
 4 const int N=110;
 5 int a[N][N],s[N][N];
 6 int f[N];
 7 int main()
 8 {
 9     int n;
10     while(~scanf("%d",&n))
11     {
12         for(int i=1;i<=n;i++)
13             for(int j=1;j<=n;j++) scanf("%d",&a[i][j]);
14         for(int i=1;i<=n;i++)
15         {
16             s[i][0]=0;
17             for(int j=1;j<=n;j++) s[i][j]=s[i][j-1]+a[i][j];
18         }
19         int ans=-10000000;
20         for(int i=0;i<n;i++)
21             for(int j=i+1;j<=n;j++)
22             {
23                 int sum=0;
24                 for(int k=1;k<=n;k++)
25                 {
26                     sum+=s[k][j]-s[k][i];
27                     if(sum>ans) ans=sum;
28                     if(sum<0) sum=0;
29                 }
30             }
31         printf("%d\n",ans);
32     }
33     return 0;
34 }

 

posted on 2012-11-17 23:13  Qiuqiqiu  阅读(143)  评论(0编辑  收藏  举报