uva108 - Maximum Sum(最大和)
2013-04-14 15:54
274 查看
转来大神的话:
/**
* 首先计算每一列的前序和(即0行到所有行上值的总和)
* 其次,最大的子矩阵一定在a行和b行之间,所以我们可以枚举所有的可能组合,时间复杂度为O(N*N)
* 因为我们在第一步中计算了前序和,那么第二步中a行和b行之间的子矩阵可以看成一个一维的数组,长度为N。
* 其值的计算可以利用第一步中的前序和,遍历所有列,让0-b的总和减去0-a的总和,即为a-b的总和。
* 利用该算法算出该一维数组中的最大连续子序列。时间复杂度为O(N),
* 找出最大值,最后的时间复杂度为0(N*N*N)。
*/
自己的代码:
#include <cstdio>
#define M 150
int n, a[M][M];
int main ()
{
int max, sum, m;
while(scanf("%d",&n)!=EOF)
{
for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) {scanf("%d",&a[i][j]); a[i][j]+=a[i-1][j]; }
max = a[1][1];
for(int i = 0; i <= n; i++)
{
for(int j = i; j <= n; j++)
{
sum = 0;
for(int k = 1; k <= n; k++)//很巧妙的方法来找最大值!!!
{
if(sum<0) sum = 0;
sum+=a[j][k]-a[i-1][k];
if(sum>max) max = sum;
}
}
}
printf("%d\n",max);
}
return 0;
}
/**
* 首先计算每一列的前序和(即0行到所有行上值的总和)
* 其次,最大的子矩阵一定在a行和b行之间,所以我们可以枚举所有的可能组合,时间复杂度为O(N*N)
* 因为我们在第一步中计算了前序和,那么第二步中a行和b行之间的子矩阵可以看成一个一维的数组,长度为N。
* 其值的计算可以利用第一步中的前序和,遍历所有列,让0-b的总和减去0-a的总和,即为a-b的总和。
* 利用该算法算出该一维数组中的最大连续子序列。时间复杂度为O(N),
* 找出最大值,最后的时间复杂度为0(N*N*N)。
*/
自己的代码:
#include <cstdio>
#define M 150
int n, a[M][M];
int main ()
{
int max, sum, m;
while(scanf("%d",&n)!=EOF)
{
for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) {scanf("%d",&a[i][j]); a[i][j]+=a[i-1][j]; }
max = a[1][1];
for(int i = 0; i <= n; i++)
{
for(int j = i; j <= n; j++)
{
sum = 0;
for(int k = 1; k <= n; k++)//很巧妙的方法来找最大值!!!
{
if(sum<0) sum = 0;
sum+=a[j][k]-a[i-1][k];
if(sum>max) max = sum;
}
}
}
printf("%d\n",max);
}
return 0;
}
相关文章推荐
- uva 108 Maximum Sum 最大子矩阵和
- uva108 Maximum sum(矩阵最大和)
- UVA108 - Maximum Sum(最大连续和)
- UVA 108 Maximum Sum(子矩阵最大和)
- UVa 108 - Maximum Sum(最大连续子序列)
- UVA 108 Maximum Sum 最大连续子矩阵和
- UVA 108 Maximum Sum 最大连续子矩阵和
- uva 108 Maximum Sum 最大子矩阵和
- UVA - 108 Maximum Sum 求子矩阵的最大和
- UVA - 108 Maximum Sum(子矩阵最大和)
- UVa 108 - Maximum Sum (最大子矩阵)
- UVA 108 Maximum Sum (最大子矩阵和) POJ 1050
- UVa 108 Maximum Sum (贪心&最大子矩阵和)
- UVA - 108 Maximum Sum(最大子矩阵和)
- uva108 - - Maximum Sum (最大连续子矩阵和)
- UVa 108|Maximum Sum|动态规划
- UVa 108 - Maximum Sum
- Uva 108 Maximum Sum
- uva 108 Maximum Sum
- UVA - 108 Maximum Sum