题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1146
0 | ?2 | ?7 | 0 |
9 | 2 | ?6 | 2 |
?4 | 1 | ?4 | 1 |
?1 | 8 | 0 | ?2 |
input | output |
---|---|
4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 |
15 |
PS:
先把遍历,把每一行相加,在求最大子序列的和!有点暴力的味道
代码如下:
#include <cstdio> #include <cstring> #define INF 0x3f3f3f3f int n; int a[147][147], s[147]; int findd(int x, int y) { memset(s, 0,sizeof(s)); for(int i = 0; i < n; i++)//同一行相加 { for(int j = x; j <= y; j++) { s[i] += a[i][j]; } } int MAX = -INF, sum = 0; for(int i = 0; i < n; i++)//子序列 { sum+=s[i]; if(sum > MAX) { MAX = sum; } if(sum < 0) sum = 0; } return MAX; } int main() { while(~scanf("%d",&n)) { int maxx = -INF; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { scanf("%d",&a[i][j]); } } for(int i = 0; i < n; i++) { for(int j = i; j < n; j++) { int tt = findd(i, j); if(tt > maxx) { maxx = tt; } } } printf("%d\n",maxx); } return 0; }
URAL 1146. Maximum Sum(求最大子矩阵和)
原文地址:http://blog.csdn.net/u012860063/article/details/43646475