题意:
在序列中任意选择一个起点,使得其上升序列之和最大。
思路:
跟(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;
}