输入
第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 }
浙公网安备 33010602011771号