zoukankan      html  css  js  c++  java
  • 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 F题

    The Heaviest Non-decreasing Subsequence Problem

    这里写图片描述这里写图片描述


    解题心得

    1. 这个题就是一个简单的动态规划,非递减最长子序列的改版(加一个权重),只要把权重为5的改成5个权重为1的然后dp就可以解决了,注意要用nlogn的复杂度才可以。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 1e6+100;
    typedef long long ll;
    ll dp[maxn],num[maxn],w[maxn];
    
    ll get_ans(ll t)
    {
        ll len = 0;
        ll sum = 0;
        for(int i=0;i<t;i++)
        {
            if(dp[len] <= num[i])
            {
                dp[++len] = num[i];
                sum += w[i];
            }
            else
            {
                int pos = upper_bound(dp,dp+len,num[i]) - dp;
                dp[pos] = num[i];
            }
        }
        return sum;
    }
    
    int main()
    {
        ll now;
        ll t = 0;
        while(scanf("%lld",&now) != EOF)
        {
            if(now < 0)
                continue;
            else if(now < 10000)
            {
                num[t] = now;
                w[t++] = 1;
            }
            else
            {
                int Now = now - 10000;
                for(int j=0;j<5;j++)//一个5的权重变成5个权重为1的
                {
                    num[t] = Now;
                    w[t++] = 1;
                }
            }
        }
    
        ll ans = get_ans(t);
        printf("%lld
    ",ans);
        return 0;
    }
    
  • 相关阅读:
    日志模块
    模块介绍3
    模块介绍2
    模块介绍
    迭代器
    Python装饰器续/三元表达式/匿名函数
    Python装饰器详解
    LATEX LIAN XI
    BELLMAN 最短路算法
    B阿狸和桃子的游戏
  • 原文地址:https://www.cnblogs.com/GoldenFingers/p/9107265.html
Copyright © 2011-2022 走看看