zoukankan      html  css  js  c++  java
  • HDU--1087 求最长递增子序列的和(DP)

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=1087

        题意:这个样例很误导人啊,这个题意呢,就是从起点跳到终点,保持递增跳而且得分最大。注意,起点和终点是不计分的;

        解析:模板改一下就好了,之前求的是序列长度。这里求和,那么只要把dp初始化a[ ],依然还是探讨每个数选还是不选的问题。转移方程:

      if(a[i]>a[j])
      dp[ i ]=max(dp[ i ],dp[ j ]+a[ i ])
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int maxn = 1e6+10;
    typedef long long ll;
    ll a[maxn];
    ll dp[maxn];
    int main()
    {
        ll n ;
        while(cin>>n)
        {
            if(n==0)    
                break;
            for(int i =0  ; i<n;i++)
                cin>>a[i];
            for(int i=0;i<n;i++)
                dp[i]=a[i];
            ll maxx=-1;
            ll sum = 0;
            for(int i = 1 ;i <n ; i++)
            {
                for(int j = 0 ; j< i; j++)
                {
                    if(a[i]>a[j])
                    {
                        dp[i]=max(dp[i],dp[j]+a[i]);
                    }
                }
                maxx=max(dp[i],maxx);
            }
            cout<<maxx<<endl;
        }
    }
  • 相关阅读:
    git 常用命令
    centos 7 mini 安装
    python打印杨辉三角
    python 求100内的素数/质数
    字符串与bytes
    format
    Python字符串格式化
    数据结构
    ARM工作模式
    C语言实现字符串逆序输出
  • 原文地址:https://www.cnblogs.com/liyexin/p/12683114.html
Copyright © 2011-2022 走看看