题目:给出一个序列,求出这个序列的所有子序列中和最大的那个,输出最大的和。
解题思路:利用两重循环 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;
}
感想:动态规划的问题很抽象。