void-man

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

不解释,直接上代码

写循环把当前行与下一行叠加,然后用最大连续和求出此时的最大和

View Code
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <iostream>
4 #include <string.h>
5  #define N 101
6  using namespace std;
7 int Maxsum(int n, int *a)
8 {
9 int sum = 0,b = 0;
10 for(int i=0; i<n; i++)
11 {
12 if( b > 0 )
13 b += a[i];
14 else
15 b = a[i];
16 if( b > sum )
17 sum = b;
18 }
19 return sum;
20 }
21 int main(void)
22 {
23 int n,mat[N][N];
24 int sum[N],max = 0;
25 cin >> n;
26 for(int i=0; i<n; i++)
27 for(int k=0; k<n; k++)
28 cin >> mat[i][k];
29 for(int i=0; i<n; i++)
30 {
31 memset(sum,0,sizeof(sum));
32 for(int k=i; k<n; k++)
33 {
34 for(int j=0; j<n; j++)
35 sum[j] += mat[k][j];
36 int tempsum = Maxsum(n,sum);
37 if( tempsum > max )
38 max = tempsum;
39 }
40 }
41 cout << max << endl;
42 return 0;
43 }
posted on 2011-05-07 14:01  void-man  阅读(111)  评论(0)    收藏  举报