点我看题目

题意 : 给你一个n*n的矩阵,让你找一个子矩阵要求和最大。

思路 : 这个题都看了好多天了,一直不会做,今天娅楠美女给讲了,要转化成一维的,也就是说每一列存的是前几列的和,也就是说

 0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2

处理后就是:
0  -2  -9  -9
9   11  5   7
-4 -3  -7  -6
-1  7   7   5

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 
 5 using namespace std;
 6 
 7 int sum[110][110] ;
 8 int main()
 9 {
10     int n ,m;
11     while(~scanf("%d",&n))
12     {
13         memset(sum,0,sizeof(sum)) ;
14         for(int i = 1 ; i <= n ; i++)
15         {
16             for(int j = 1 ; j <= n ; j++)
17             {
18                 scanf("%d",&m) ;
19                 sum[i][j] = sum[i-1][j]+m ;
20             }
21         }
22         int ans = -9999999 ;
23         for(int i = 1 ; i <= n ; i++ )
24             for(int j = i ; j <= n ; j++)
25             {
26                 int cnt = 0 ;
27                 for(int k = 1 ; k <= n ; k ++)
28                 {
29                     cnt += sum[j][k]-sum[i-1][k] ;
30                     ans = max(cnt,ans) ;
31                     if(cnt < 0) cnt = 0 ;
32                 }
33             }
34         printf("%d",ans) ;
35     }
36     return 0;
37 }
View Code

 

posted on 2014-04-06 20:40  枫、  阅读(177)  评论(0)    收藏  举报