|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1066: 最大子矩阵
题目描述
已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。
比如,如下4 * 4的矩阵
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
的最大子矩阵是
9 2
-4 1
-1 8
这个子矩阵的大小是15。
输入
输入是一个N * N的矩阵。输入的第一行给出N (0 < N <= 100)。再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从左到右给出第二行的N个整数……)给出矩阵中的N2个整数,整数之间由空白字符分隔(空格或者空行)。已知矩阵中整数的范围都在[-127, 127]。
输出
输出最大子矩阵的大小。
样例输入 复制
4
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
样例输出 复制
15
#include <stdio.h>
#pragma warning(disable:4996)
int main(void)
{
int n, i, j;
int dig[20][20] = { 0 }, cpy[20][20] = { 0 };
scanf("%d",&n);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &dig[i][j]);
}
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
int x = i;
while (x >= 0 ) {
cpy[i][j] += dig[x][j];
x--;
}
}
}
int max = 0;
for (i = 0; i < n;i++){//对每一行进行最大字段和的判断
int tmp_1[20] = {0};
int tmp_2[20] = {0};
for (j = 0; j < n;j++){
tmp_1[j] = cpy[i][j];
tmp_2[j] = cpy[i][j];
}
for(j = 1;j < n;j++){
if (tmp_2[j-1] > 0){
tmp_2[j] = tmp_2[j-1] + tmp_1[j];
}
if (tmp_2[j] > max){
max = tmp_2[j];
}
}
}
printf("%d",max);
return 0;
}
请问这个C语言程序怎么改才能输出正确结果? |
|