输入

第1行:M和N,中间用空格隔开(2 <= M,N <= 500)。
第2 - N + 1行:矩阵中的元素,每行M个数,中间用空格隔开。(-10^9 <= M[i] <= 10^9)
输出
 
输出和的最大值。如果所有数都是负数,就输出0。
 
输入示例

3 3
-1 3 -1
2 -1 3
-3 1 2

输出示例

7
 1 #include<algorithm>
 2 #include<iostream>
 3 #include<limits.h>
 4 #include<stdlib.h>
 5 #include<string.h>
 6 #include<complex>
 7 #include<cstring>
 8 #include<iomanip>
 9 #include<stdio.h>
10 #include<bitset>
11 #include<cctype>
12 #include<math.h>
13 #include<string>
14 #include<time.h>
15 #include<vector>
16 #include<cmath>
17 #include<queue>
18 #include<stack>
19 #include<list>
20 #include<map>
21 #include<set>
22 
23 #define LL long long
24 
25 using namespace std;
26 const LL mod = 1e9 + 7;
27 const double PI = acos(-1.0);
28 const double E = exp(1.0);
29 const int M = 1e3 + 5;
30 
31 LL a[M][M];
32 LL dp[M][M];
33 LL b[M];
34 
35 int main()
36 {
37     int n, m;
38     while( cin >> n >> m ){
39         memset(dp, 0, sizeof(dp));
40         for(int i = 1; i <= m; ++i)
41             for(int j = 1; j <= n; ++j)
42                 cin >> a[i][j];
43         LL sum;
44         LL mx = 0;
45         for(int i = 0; i <= m; ++i){
46             memset(b, 0, sizeof(b));
47             for(int j = i; j <= m; ++j){
48                 sum = 0;
49                 for(int k = 1; k <= n; ++k)
50                     b[k] += a[j][k];
51                 for(int k = 1; k <= n; ++k){
52                     sum += b[k];
53                     if(sum < 0)
54                         sum = 0;
55                     mx = max(mx, sum);
56                 }
57             }
58         }
59         cout << mx << endl;
60     }
61     return 0;
62 }

 

posted on 2015-08-03 21:22  Unico  阅读(354)  评论(0)    收藏  举报