您的位置:首页 > 其它

HDU1087 Super Jumping! Jumping! Jumping! 动态规划

2014-10-31 12:24 232 查看
动态规划

本题其实就是求一个序列的最长上升子序列,状态转移方程为:dp【i】=max(dp【i】,dp【j】+ans【i】)

#include <cstdio>
#include <iostream>
#define MAX 1100
using namespace std;
int main()
{
int ans[MAX],dp[MAX];
int n,i;
while(scanf("%d",&n)&&n)
{
for(i=0;i<n;i++)
scanf("%d",&ans[i]);
for(i=0;i<n;i++)  dp[i]=ans[i];
int temp=ans[0];
for(i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
if(ans[i]>ans[j])
dp[i]=max(dp[i],dp[j]+ans[i]);
temp=max(temp,dp[i]);
}
printf("%d\n",temp);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: