您的位置:首页 > 其它

POJ1050&HDU1081-To the Max

2016-08-17 11:03 281 查看
从一个矩阵中寻找和最大的子矩阵,简单的枚举各种情况即可。

数组a表示原矩阵,b表示a中的某几行之和组成的新序列,这样就转换为求新序列的最大连续子序列的和问题了。

在杭电上提交时数据改为多组输入….

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int maxn = 100 + 5;

int a[maxn][maxn];
int b[maxn];

int calc(int n) {
int sum,max_sum;
sum = max_sum = 0;
for (int i = 0; i < n; i++) {
sum += b[i];
if (sum > max_sum) {
max_sum = sum;
} else if (sum < 0) {
sum = 0;
}
}
return max_sum;
}

int main(int argc, char const *argv[]) {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
int max_sum = 0;
for (int i = 0; i < n; i++) {
memset(b, 0, sizeof(b));
for (int j = i; j < n; j++) {
for (int k = 0; k < n; k++) {
b[k] += a[j][k];
}
max_sum = max(max_sum, calc(n));
}
}
printf("%d\n", max_sum);

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