hdu 1087 解题报告 Super Jumping! Jumping! Jumping!

来源:互联网 发布:淘宝分销软件 编辑:程序博客网 时间:2024/05/16 11:06

hdu 1087 Super Jumping! Jumping! Jumping!

hdu 1087 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1087

动态规划题

/************************************************************************//*双重循环,里面一重求得每一个位置i时最优解。就比如i从0到n,先求出0位置的最优解是其本身,再求出1位置的最优解(即判断是其本身大还是从0跳到1所得解大,取其大)。再求2位置的最优解(即判断shiite其本身大还是从0跳到2所得解答,还是从1跳到2所得解大(即1的最优解基础上加上2所得解),取其大)。。。。                                                               /************************************************************************/#include <stdio.h>int num[1010],dp[1010];int main(){int n,max,i;while (scanf("%d",&n),n){for (i=0;i<n;i++){scanf("%d",&num[i]);dp[i]=num[i];}max=0;for (i=0;i<n;i++){for (j=0;j<i;j++)if(num[i]>num[j]&&dp[i]<dp[j]+num[i])//若当前结点大于第j个结点,且当前的最优解dp[i]小于第j个位置的结点-跳到->当前结点i所得解,则当前最优解变为dp[j]+num[i]dp[i]=dp[j]+num[i];//在dp的每个元素在从dp[0]到dp[n]的循环中,一步步均变为到达本身位置的最优解if(max<dp[i])max=dp[i];} printf("%d\n",max);}}


原创粉丝点击