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;
    }
    
  • 相关阅读:
    Restful API
    Vue之指令
    Scrapy框架
    爬虫提高性能:串行、线程进程、异步非阻塞
    MongoDB
    Beautifulsoup模块
    请求库之selenium
    php 正则匹配中文
    Javascript的"预编译"思考
    PHP程序员面试技巧之口试题分享
  • 原文地址:https://www.cnblogs.com/GoldenFingers/p/9107265.html
Copyright © 2011-2022 走看看