每一个状态是D[i]表示以第i个元素结尾的上升子序列的和
#include<iostream>
#include <memory.h>
#include <algorithm>
#define MAX 1005
using namespace std;
struct node
{
int num;
int sum;
int id;
};
node D[MAX];
int N;
int main()
{
cin >> N;
for(int i=1; i<=N; i++)
cin >> D[i].num;
for(int i=1; i<=N; i++)
{
D[i].id = i;
D[i].sum = D[i].num;
}
for(int i=2; i<=N; i++)
{
int temp=0,M=0;
for(int j=1; j<i; j++)
{
if(D[j].sum>M && D[j].num<D[i].num)
{
M = D[j].sum;
temp = j;
}
}
if(temp && M)
{
D[i].sum += D[temp].sum ;
}
}
int M=-1;
for(int i=1;i<=N;i++)
M = max(D[i].sum,M);
cout<<M<<endl;
return 0;
}