hdu 1087 Super Jumping! Jumping! Jumping!(动态规划DP)

时间:2021-07-14 22:21:52

题意:

在序列中任意选择一个起点,使得其上升序列之和最大。

思路:

跟(hdu1069--猴子摘香蕉)是一样的,只要后一个数字比前一个数字大就可以尝试累加,最后输出dp数组中的最大值即可。

hdu1069--猴子摘香蕉的题解:http://blog.csdn.net/qq_37325947/article/details/77108288

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int dp[1500],en[1500];
int main(){
int n;
while(scanf("%d",&n)&&n){
for(int i=0;i<n;i++)
scanf("%d",&en[i]);

for(int i=0;i<n;i++){
dp[i]=en[i];
for(int j=i-1;j>=0;j--)
if(en[i]>en[j]){
dp[i]=max(dp[i],en[i]+dp[j]);
}
}
int mx=dp[0];
for(int i=0;i<n;i++)
if(dp[i]>mx) mx=dp[i];
printf("%d\n",mx);
}
return 0;
}