poj 1050 To the Max

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  

 

你可能感兴趣的:(poj)