hdu 1087 Super Jumping! Jumping! Jumping! (dp最大递增字段和)

取最大最小值时的初始化出问题了 !!!

WA了好多次 还一直以为是对的  甚至开始怀疑到 是不是因为 大量数据 所以得用scanf了。

结果证明特么确实  那个max不能初始化成-1,而是0。

龙叔给 的一组测试数据 10 8 7 2 3 4 5 你跑跑 是不是13

是的啊  恭喜你啊  错了 是14。

就是说 如果 那个i和j的 循环里 你的 a[i]<a[j]恒成立的话 你的dp[i]的值就会变成a[i]-1了而不是 期望中的a[i]。

网上的代码是怎么解决这个问题的呢  它是用了a[0]=0来做的。当然他前面就是用1到n的方式储存而不是0到n-1的方式。

附两段代码 就是输入的时候 1到n还是0到n-1的区别 自己感觉哪个舒服吧

#include <iostream>
using namespace std;
int n;
int a[1005];
int dp[1005];
int main()
{
    while(cin>>n)
    {
        if(n==0) break;
        for(int i=0;i<n;i++)
        {
            cin>>a[i];
            dp[i]=0;
        }
        dp[0]=a[0];
        for(int i=1;i<n;i++)
        {
            int max=0;
            for(int j=0;j<i;j++)
            {
                if(a[i]>a[j]&&dp[j]>max)
                    max=dp[j];
            }
            dp[i]=max+a[i];
        }

        int max=0;
        for(int i=0;i<n;i++)
        {
            if(dp[i]>max)
                max=dp[i];
        }
        cout<<max<<endl;

    }
    return 0;
}
#include <iostream>
#include <cstdio>
using namespace std;
int n;
int a[1005];
int dp[1005];
int main()
{
    while(~scanf("%d",&n),n)
    {
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            dp[i]=0;
        }
        dp[1]=a[1];
        for(int i=2;i<=n;i++)
        {
            int max=0;
            for(int j=1;j<i;j++)
            {
                if(a[i]>a[j]&&dp[j]>max)
                    max=dp[j];
            }
            dp[i]=max+a[i];
        }

        int max=0;
        for(int i=1;i<=n;i++)
        {
            if(dp[i]>max)
                max=dp[i];
        }
        cout<<max<<endl;

    }
    return 0;
}
时间: 2024-10-06 23:01:19

hdu 1087 Super Jumping! Jumping! Jumping! (dp最大递增字段和)的相关文章

[2016-03-27][HDU][1087][Super Jumping! Jumping! Jumping!]

时间:2016-03-27 15:51:40 星期日 题目编号:[2016-03-27][HDU][1087][Super Jumping! Jumping! Jumping!] 分析:dp[i]表示跳到第i个位置,能拿到的最多分,则dp[i] = max(dp[i] , dp[j] + v[i]) 能从j跳到i 遇到的问题:排序之和,a[1].v <= a[2].v 而不是 a[1].v < a[2].v 所以还是需要判断一下价值 #include <algorithm> #in

[ACM] hdu 1087 Super Jumping! Jumping! Jumping! (动态规划)

Super Jumping! Jumping! Jumping! Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 6   Accepted Submission(s) : 5 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description Nowada

hdu 1087 Super Jumping! Jumping! Jumping!(动态规划DP)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087 Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 24452    Accepted Submission(s): 10786 Problem Description No

HDU 1087 Super Jumping! Jumping! Jumping! 简单DP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087 题目大意:N个数字组成的一条路,每个数字是一个节点顺序连接,起点在第一个数之前,终点在第N个数之后.现让你选择一条路从起点跳到终点,只能往前且跳到比当前点大的那个点,可以认为终点是最大的,可以从起点直接跳到终点但是路的值就是0了,每条路的值为所经过的数字节点的值的和,问你值最大为多少. 解题思路:决策:在当前点i往i~N哪个点跳,反过来当前点i+1可以从1~i哪个点跳过来,那么a[i+1] >

hdu 1087 Super Jumping! Jumping! Jumping!(dp 最长上升子序列和)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087 ---------------------------------------------------------------------------------------------------------------------------------------------------------- 欢迎光临天资小屋:http://user.qzone.qq.com/593830943

hdu 1087 Super Jumping! Jumping! Jumping! 简单的dp

Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 34052    Accepted Submission(s): 15437 Problem Description Nowadays, a kind of chess game called “Super Jumping!

HDU 1087 Super Jumping! Jumping! Jumping! (DP)

C - Super Jumping! Jumping! Jumping! Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. Maybe you are a good boy, a

HDOJ/HDU 1087 Super Jumping! Jumping! Jumping!(经典DP~)

Problem Description Nowadays, a kind of chess game called "Super Jumping! Jumping! Jumping!" is very popular in HDU. Maybe you are a good boy, and know little about this game, so I introduce it to you now. The game can be played by two or more t

hdu 1087 Super Jumping! Jumping! Jumping!(dp:上升子序列最大和)

Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 24824    Accepted Submission(s): 10961 Problem Description Nowadays, a kind of chess game called "Super Jumping!

HDU 1087 Super Jumping! Jumping! Jumping!【DP】

解题思路:题目的大意是给出一列数,求这列数里面最长递增数列的和 dp[i]表示到达地点i的最大值,那么是如何达到i的呢,则我们可以考虑没有限制条件时候的跳跃,即可以从第1,2,3,---,i-1个地点跳跃到i, 而题目限定了,跳到的那个点的数要比开始跳的那个点的数大 所以,状态转移方程式为 for(i=1;i<=n;i++)   for(j=0;j<i;j++) if(a[j]>a[i])   dp[i]=max(dp[j]+a[i],dp[i]);//找出到达地点i的最大值 反思:本来