很简单的一个DP,dp数组记录从前往后的最大值,用a数组进行比较。
#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<vector>
#include<string.h>
#define eps 1e-5
#define inf 0x7fffffff
#pragma comment(linker,"/STACK:102400000,102400000")
#define ll __int64
using namespace std;
int main()
{
int n;
int a[1010],dp[1010];
while(scanf("%d",&n)&&n)
{
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
dp[i]=a[i];
}
for(int i=1;i<n;i++)
{
for(int j=0;j<i;j++){
if(a[i]>a[j])
dp[i]=max(dp[j]+a[i],dp[i]);
}
}
int max1=0;
for(int i=0;i<n;i++)
max1=max(max1,dp[i]);
printf("%d\n",max1);
}
}