本文主要是介绍HDOJ1087 Super Jumping! Jumping! Jumping!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Super Jumping! Jumping! Jumping!
http://acm.hdu.edu.cn/showproblem.php?pid=1087
分析:
简单的动态规划题。题目的意思很直白,其实就是寻找最长递增子序列。
假设dp[i]表示的是从start到达第i个点时可获得的最大分数,data[i]表示的是第i个点的分数值,那么可以得到,
dp[i]= max{dp[i],dp[j]+data[i] },
其中,j<i,且data[j]<=data[i],即j表示的是每一个在i前面且其分数值不大于data[i]的点,计算完dp之后,结果很明显就是dp中的最大值。
AC代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{int n;int dp[1005],data[1005]; while(cin>>n&&n){for(int i=1;i<=n;i++){cin>>data[i];dp[i]=data[i];}dp[0]=data[0]=0;int ans=0;for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){if(data[j]>data[i]){dp[j]=max(dp[j],dp[i]+data[j]);}}ans=max(dp[i],ans);}cout<<ans<<endl;}return 0;
}
这篇关于HDOJ1087 Super Jumping! Jumping! Jumping!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!