动态规划—13最大上升子序列和
2017-04-19 22:42
183 查看
题目:给出一个序列,求出这个序列的所有子序列中和最大的那个,输出最大的和。
解题思路:利用两重循环 for(i=0;i<n;i++), for(j=0;j<i;j++)然后用b[i]数组存那个最大的和,定义一个max用max与b[i]比较大小如果b[i]>max,则max=b[j],然后用一重循环在与定义的t=0比较大小求出最大的那个即是答案。
细节处理:再定义一个b数组存最大和。
代码:#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[1007],b[1007];
int n,i,j,max;
while(cin>>n)
{
for(i=0;i<n;i++)
cin>>a[i];
b[0]=a[0];
for(i=0;i<n;i++)
{
max=0;
for(j=0;j<i;j++)
{
if(a[i]>a[j])
{
if(max<b[j])
max=b[j];
}
}
b[i]=a[i]+max;
}
int t=0;
for(i=0;i<n;i++)
{
if(t<b[i])
t=b[i];
}
cout<<t<<endl;
}
return 0;
}
感想:动态规划的问题很抽象。
解题思路:利用两重循环 for(i=0;i<n;i++), for(j=0;j<i;j++)然后用b[i]数组存那个最大的和,定义一个max用max与b[i]比较大小如果b[i]>max,则max=b[j],然后用一重循环在与定义的t=0比较大小求出最大的那个即是答案。
细节处理:再定义一个b数组存最大和。
代码:#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[1007],b[1007];
int n,i,j,max;
while(cin>>n)
{
for(i=0;i<n;i++)
cin>>a[i];
b[0]=a[0];
for(i=0;i<n;i++)
{
max=0;
for(j=0;j<i;j++)
{
if(a[i]>a[j])
{
if(max<b[j])
max=b[j];
}
}
b[i]=a[i]+max;
}
int t=0;
for(i=0;i<n;i++)
{
if(t<b[i])
t=b[i];
}
cout<<t<<endl;
}
return 0;
}
感想:动态规划的问题很抽象。
相关文章推荐
- 动态规划练习--13(最大上升子序列和)
- 动态规划练习一 13:最大上升子序列和
- 动态规划练习一—13最大上升子序列
- 动态规划练习题-13(最大上升子序列和)
- ACM-动态规划13-最大上升子序列和
- HDU 1087 Super Jumping! Jumping! Jumping! (求最大上升子序列和,动态规划)
- hdu 1087 (最大上升子序列和)动态规划
- 九度OJ 1480 动态规划 最大上升子序列和
- |NOIOJ|动态规划|3532:最大上升子序列和
- 13:最大上升子序列和
- 动态规划练习——最大上升子序列和
- HDU 1087(最大上升子序列+动态规划)
- 13:最大上升子序列和
- 13:最大上升子序列和
- 【HDU 1087】Super Jumping! Jumping! Jumping!(最大上升子序列和,动态规划)
- 九度OJ 1480 最大上升子序列和 -- 动态规划
- 九度OJ 1480 最大上升子序列和 -- 动态规划
- 13:最大上升子序列和
- 13:最大上升子序列和
- 动态规划--最大上升子序列和