动态规划练习一—2最大子矩阵
2017-04-17 21:21
211 查看
1、题意:对于给予的矩阵,输出其子矩阵中最大的和
2、思路:先确定行数,再将选中行的所有列的和分别储存起来,在寻找此序列的最大连续字段和。比较保存最大值。
3、感想:此题上课老师也讲过,新的思路,解两个自变量的最大值,先确定其中一个,再计算另一个。
4、代码:
#include<bits/stdc++.h>
using namespace std;
int f(int b[101],int
n)
{
int i,max=0,s=0;
for(i=0;i<n;i++)
{if(s>0) s+=b[i];
else s=b[i];
if(max<s) max=s;
}
return max;
}
int main()
{
int a[101][101],b[101],i,n,j,max=0,s,k;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
b[j]=0;
for(j=i;j<n;j++)
{for(k=0;k<n;k++)
b[k]+=a[j][k];
s=f(b,n);
if(max<s) max=s;
}}
cout<<max<<endl;
return 0;
}
2、思路:先确定行数,再将选中行的所有列的和分别储存起来,在寻找此序列的最大连续字段和。比较保存最大值。
3、感想:此题上课老师也讲过,新的思路,解两个自变量的最大值,先确定其中一个,再计算另一个。
4、代码:
#include<bits/stdc++.h>
using namespace std;
int f(int b[101],int
n)
{
int i,max=0,s=0;
for(i=0;i<n;i++)
{if(s>0) s+=b[i];
else s=b[i];
if(max<s) max=s;
}
return max;
}
int main()
{
int a[101][101],b[101],i,n,j,max=0,s,k;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
b[j]=0;
for(j=i;j<n;j++)
{for(k=0;k<n;k++)
b[k]+=a[j][k];
s=f(b,n);
if(max<s) max=s;
}}
cout<<max<<endl;
return 0;
}
相关文章推荐
- 动态规划练习一 02:最大子矩阵
- 动态规划练习02:最大子矩阵
- 动态规划练习——最大子矩阵
- 动态规划练习--02(最大子矩阵)
- 动态规划练习-2(最大子矩阵)
- POJ 1050 求最大子矩阵和 动态规划
- 【动态规划】求二维矩阵的最大和子矩阵
- 动态规划--最大字段和-最大子矩阵
- HDU 1081(动态规划-最大和子矩阵)
- openjudge 最大子矩阵 (DP 动态规划)
- POJ 1050 求最大子矩阵和 动态规划
- POJ 1050 To the Max (动态规划——求最大子矩阵和)
- 动态规划最大子矩阵
- poj1050(动态规划+最大子矩阵和)
- 【动态规划】HDU1559最大子矩阵
- 动态规划_题目1139:最大子矩阵
- HDU 2870(动态规划-最大子矩阵)
- 动态规划---最大子段和,最大子矩阵和,最大m子段和
- 最大子矩阵(动态规划)
- |NOIOJ|动态规划|1768:最大子矩阵