hdu 1087 Super Jumping! Jumping! Jumping!

vjudge今晚不知道怎么了,抽风了一段时间,于是我接着复习去了,结果又不想复习再一连就连上来了,算了刷刷水题,涨涨自信吧。

记忆化搜索dp,思路不说了,注意一下longlong不要溢出就可以。

题目链接:https://vjudge.net/problem/HDU-1087

#include 
#include 
#include 

using namespace std;

const int maxn = 1005;
int n;
int G[maxn];
long long dp[maxn];

long long dfs (int pos) {
	if (pos == n) return dp[pos] = G[pos];
	if (dp[pos]) return dp[pos];
	long long ans = G[pos];
	for (int i = 1 ; i <= n-pos ; i++)
		if(G[pos] < G[pos+i]) ans = max(ans , dfs(pos+i)+G[pos]);
	return dp[pos] = ans;
}

int main () {
	while (scanf("%d" , &n) != EOF && n) {
		long long ans = 0;
		memset(dp,0,sizeof(dp));
		memset(G, 0,sizeof(G));
		for (int i = 1 ; i <= n ; i++)
			scanf("%d" , &G[i]);
		for(int i = 1 ; i <= n ; i++)
			ans = max(ans , dfs(i));
		printf("%d\n" , ans);
	}
}


你可能感兴趣的:(动态规划)