参考链接:
Super Jumping! Jumping! Jumping! (上升子序列的最大和)_m悟空的博客-CSDN博客
收获:
1.用两层循环寻找最长增长子序列
2.每次找确定元素 前的最大和 维护最大值
代码:
#include<iostream>
#include<cstring>
using namespace std;
int a[1010],dp[1010];
int main()
{
int n;
while(cin>>n&&n)
{
int Ma=-1; //最大字段和
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
cin>>a[i];
a[0]=0; //最前面的数初始化为0
for(int i=1;i<=n;i++)
{
int ma=-1;
for(int j=0;j<i;j++) //在[0,i)中找到一个最大的和num[j]<num[i]
{
if(a[j]<a[i])
ma=max(ma,dp[j]);
}
//每次找确定元素 前的最大和 维护最大值
dp[i]=ma+a[i];
Ma=max(dp[i],Ma);
}
cout<<Ma<<endl;
}
return 0;
}
题目: