1.题目编号
1003
2.简单题意
简单来说就是求最大上升子序列的和
3.解题思路
dp求解,判断下一个数字是否成立,若成立则dp[i]=dp[j]+a[i]
4.感想
课上老师讲过,题库里也有一样的题,没啥感想
5.代码
#include <iostream>
#include <cstring>
using namespace std;
const int MAX=1001;
int dp[MAX];
int a[MAX];
int main()
{
int n;
while(cin>>n)
{
if(!n)
break;
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
{
cin>>a[i];
dp[i]=a[i];
}
for(int i=1;i<=n;i++)
for(int j=1;j<i;j++)
if(a[j]<a[i]&&dp[j]+a[i]>dp[i])
dp[i]=dp[j]+a[i];
int max=-1000001;
for(int i=1;i<=n;i++)
if(dp[i]>max)
max=dp[i];
cout<<max<<endl;
}
return 0;
}