hdu 1087 Super Jumping! Jumping! Jumping!

来源:互联网 发布:人工智能 中英 百度云 编辑:程序博客网 时间:2024/06/05 20:05

类似最长递增子序列的想法,只不过这里求的是到第i个元素时,最长递增子序列,各个元素的和。求最大的那个值

状态转移方程:dp[i]=max(dp[j]+value[i],dp[i])   其中(num[j]<num[i],表示i可以从j跳过去)(0<=j<i)

#include<stdio.h>#include<string.h>int main(){int num[1010],dp[1010];int n,i,j,tem;long long s,m;while(scanf("%d",&n),n){memset(num,0,sizeof(num));for(i=0;i<n;i++){scanf("%d",&num[i]);dp[i]=num[i];}s=0;for(i=1;i<n;i++){for(j=0;j<i;j++)if(num[i]>num[j]){//满足递增且当前的dp[i]小与前面中的dp[j]+当前的数 dp[i]=dp[i]>dp[j]+num[i]?dp[i]:dp[j]+num[i];//dp[i]为最长递增子序列的和,当前num[i]必选。}if(s<dp[i]) s=dp[i]; }printf("%lld\n",s);}return 0;} 


0 0
原创粉丝点击