您的位置:首页 > 理论基础

hdu 1087 Super Jumping! Jumping! Jumping!

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

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

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

#include <iostream>
#include <cstdio>
#include <cstring>

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息