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

来源:互联网 发布:拍视频特效软件 编辑:程序博客网 时间:2024/04/28 04:57

动态规划

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

#include <cstdio>#include <iostream>#define MAX 1100using 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;}

0 0