hdu1087(DP)

来源:互联网 发布:淘宝最好的沉香卖家 编辑:程序博客网 时间:2024/05/17 09:33

题目链接Super Jumping! Jumping! Jumping!

给定一个序列,每个序列代表这个点的分数,只有当j的分数<i的分数时,才能从j走到i,求能获得的最大分数

状态转移方程

if(a[i]>a[j])dp[i]=max(dp[i],dp[j]+a[i]);

代码

#include <iostream>#include <stdio.h>#include <memory.h>using namespace std;const int maxn=1005;int dp[maxn];int a[maxn];int main(){    //freopen("in.txt","r",stdin);    int n;    while(scanf("%d",&n)!=EOF&&n){        memset(dp,0,sizeof(dp));        for(int i=0;i<n;i++)scanf("%d",&a[i]);        for(int i=0;i<n;i++){            dp[i]=a[i];            for(int j=0;j<i;j++){                if(a[i]>a[j])dp[i]=max(dp[i],dp[j]+a[i]);            }        }        int ans=0;        for(int i=0;i<n;i++){            ans=max(ans,dp[i]);        }        printf("%d\n",ans);    }    return 0;}


0 0
原创粉丝点击