您的位置:首页 > 其它

HDU 1081 To The Max

2015-04-14 19:47 204 查看
题目大意:给一个n^2矩阵 求一个和最大的子矩阵

解题思路:动态规划求最大子矩阵和,把二维的转化为一维的就好做了。

1、首先看一维数组 a[] 求最大字段和,b记录以i结尾的数组最大字段和;

显然若b<0(此时存储的是以i-1为结尾的最大和),有b=a[i];
否则b+=a[i];

2、转化为一维的数组就是枚举某一连续几行,把每一列的值加起来存到
一个元素中,

这些元素就构成了一个一维数组。

然后,按照一维数组求最 大字段和的方法求解即可。

#include <cstdio>

int main() {
int N, A[105][105];
while (scanf("%d", &N) != EOF) {
int ans = -0x3f3f3f3f;
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++) {
int DP[105] = {0};
for (int j = i; j < N; j++) {
int sum = 0;
for (int k = 0; k < N; k++) {
DP[k] += A[j][k];
sum = sum <= 0 ? DP[k] : sum + DP[k];
if (sum > ans)
ans = sum;
}
}
}

printf("%d\n", ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: