Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 21023 Accepted: 10877

初看这一道题时,我感觉我从下手,如果用暴力过吧,总感觉会超时,后来经过同学的指点才恍然大悟0ms轻松通过

  思路:本题就是要求最大的长方形的值,所以对几行进行合并,合并就是让他们的和相加,每合并一次求出一个最大值,将所有的情况都合并完之后,最大值max就是所要求的值

代码:

 

1 #include<stdio.h>
2 #include<string.h>
3  int main()
4 {
5 int n,i,j,a[105][105],b[105][105],sum,max,k;
6 scanf("%d",&n);
7 max=-128;
8 for(i=1;i<=n;i++)
9 for(j=1;j<=n;j++)
10 scanf("%d",&a[i][j]);
11 for(i=1;i<=n;i++)
12 {
13 memset(b,0,sizeof(b));
14 for(j=i;j<=n;j++)
15 {
16 sum=0;
17 for(k=1;k<=n;k++)
18 {
19 b[k][j]=b[k][j-1]+a[k][j];
20 sum=sum+b[k][j];
21 if(sum<0)
22 sum=0;
23 if(sum>max)
24 max=sum;
25 }
26 }
27 }
28 printf("%d\n",max);
29 return 0;
30 }
31
32