题意:
从起点到终点,求走过的点的和最大。
分析:
最大上升子序列。状态转移方程:dp[i]=max{dp[j]+val[i],dp[i]}。
#include<stdio.h>
int main(){
int i,j,n,dp[1001],max,val[1001];
while(scanf("%d",&n)&&n!=0){
for(i=1;i<=n;++i){
scanf("%d",&val[i]);
dp[i]=val[i];
}
max=val[1];
for(i=1;i<=n;++i)
for(j=1;j<i;++j){
if(val[j]<val[i]&&dp[j]+val[i]>dp[i]){
dp[i]=dp[j]+val[i];
if(max<dp[i]) max=dp[i];
}
}
printf("%d\n",max);
}
return 0;
}