您的位置:首页 > 其它

HDOJ HDU 1087 Super Jumping! Jumping! Jumping!

2017-09-11 22:45 567 查看

HDOJ HDU 1087 Super Jumping! Jumping! Jumping!

题目

HDOJ HDU 1087 Super Jumping! Jumping! Jumping!

分类

动态规划

题意

如图



每个人 要从 n个给定的格子从 start 跳到 end

每次能跳过很多个棋子 且 不能后退

每次跳过的格子只能比上一次的大

求最大可以得多少分

题解

每一次得跳跃策略 都影响 下一步

应该有某种递推关系

想到动态规划

我们看规划策略

以 i 为 结尾得最大分值

j 为 当前结尾元素 num[j] 为 j 的 分值

dp[i][j] = max(dp[i][j], dp[i][j] + num[j]) (0 <= i <= n) (0 <= j <= i )( num[i] > num[j] )

代码

#include <iostream>
#include <cstring>
#define maxn 1000

using namespace std;

int num[maxn+1];
int dp[maxn+1];

int main()
{
int n,ans;
while(cin >> n && n)
{
ans = 0;
dp[0] = 0;
memset(dp,0,sizeof(dp));
for(int i = 1;i <= n;i++)
{
cin >> num[i];
dp[i] =  num[i];
}
dp[1] = num[1];
for(int i = 1;i <= n;i++)
for(int j = 1;j < i;j++)
{
if(num[j] < num[i])
dp[i] = max(dp[i],dp[j] + num[i]);
}
for(int i = 1;i <= n;i++)
if(dp[i] > ans)
ans = dp[i];
cout << ans << endl;;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态规划 HDOJ