zoukankan      html  css  js  c++  java
  • HDU1087

    Super Jumping! Jumping! Jumping!

    题目大意:

    多组,n等于0时输入结束,每组给你n个数,要你求得一个上升子序列,使得子序列和最大。

    数据范围:

    1n1000int

    解题思路:

    这个题显然最长上升子序列改一下就行了,状态如下:

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

    else  dp[i]=max(dp[i],a[i])

    dp[i]代表以第i个数字为结尾时的最大值。
    最后输出MAX(dp[i])(1in)就行了。

    AC代码:

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<cstdlib>
    #include<algorithm>
    using namespace std;
    const int maxn = 1000;
    typedef long long LL;
    LL dp[maxn + 5];
    LL a[maxn + 5];
    int n;
    int main() {
        while(~scanf("%d", &n) && n != 0) {
            memset(dp, 0, sizeof(dp));
            for(int i = 1; i <= n; i++)scanf("%lld", &a[i]);
            dp[1] = a[1];
            for(int i = 2; i <= n; i++) {
                for(int j = 1; j < i; j++) {
                    if(a[i] > a[j]) {
                        dp[i] = max(dp[j] + a[i], dp[i]);
                    }
                    else dp[i] = max(dp[i], a[i]);
                }
            }
            LL Max = 0;
            for(int i = 1; i <= n; i++)Max = max(Max, dp[i]);
            printf("%lld
    ", Max);
        }
        return 0;
    }
  • 相关阅读:
    团队作业开发过程
    UVM基础之--------uvm_root
    UVM基础之------uvm_transaction
    UVM基础之----uvm_object
    UVM挑战及概述
    定制UVM Messages(参考)
    SV creation order
    IC验证概念总结
    win7 硬盘安装suse双系统启动顺序更改
    suse 下的gcc安装
  • 原文地址:https://www.cnblogs.com/TRDD/p/9813533.html
Copyright © 2011-2022 走看看