题目链接: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