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

181 阅读1分钟

题意:

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

思路:

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

hdu1069--猴子摘香蕉的题解:blog.csdn.net/qq_37325947…

#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;
}


\