纪念下: 这道题是简单dp,是一道自己可以看出来并实现的dp,证明之前的学习还是有用的继续加油
状态选择方程: dp[i]=max(dp[j]+a[i],dp[i]) { j is a[j]
#include <iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define MAX 1005
int dp[MAX];
int a[MAX];
int main()
{
int n;
int ans=0;
while(cin>>n){
if(n==0)break;
memset(a,0,sizeof(a));
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++){
cin>>a[i];
}
dp[0]=a[0]=0;
ans=0;
for(int i=1;i<=n;i++){
dp[i]=a[i];
for(int j=i-1;j>0;j--){
if(a[j]<a[i]&&dp[j]+a[i]>dp[i]){
dp[i]=dp[j]+a[i];
}
}
if(dp[i]>ans)ans=dp[i];
}
printf("%d\n",ans);
}
return 0;
}