• [P3957][NOIP2017]跳房子 (DP+二分/队列?)


    看到GREED_VI大佬在打这题

    我这个蒟蒻偷偷看一眼洛谷上目前普及难度里最难的一题

    题目还是能看懂的,不想道路游戏那题,我完全不知道题目是什么意思……

    GREED_VI大佬第一次用的是二分的思想,于是我就学习了

    洛谷测评机快,因此可以过,不过想在CCF老年机上过,就需要优化了

    先打了二分的

    大致就是二分金币(g),然后判断分数能否大于等于k 就好,取最小的g值

    (我一开始全局变量和局部变量搞错了)

    #include <bits/stdc++.h>
    #define max(a,b) (a>b?a:b)
    #define min(a,b) (a<b?a:b)
    #define ll long long
    using namespace std;
    ll x[500005],s[500005],f[500005];
    ll n,d,k,ans;
    bool check(int g)
    {
        int maxl,maxr;
        maxl=d-g;
        maxr=d+g;
        memset(f,-127,sizeof(f));
        f[0]=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=i-1;j>=0;j--)
            {
                if(x[i]-x[j]<maxl) continue;
                if(x[i]-x[j]>maxr) break;
                f[i]=max(f[i],f[j]+s[i]);
                if(f[i]>=k) return 1;
            }
        }
        return 0;
    }
    int main()
    {
        cin>>n>>d>>k;
        for(int i=1;i<=n;i++){
            cin>>x[i]>>s[i];
        }
        int l=1,r=10000,mid;
        while(l<=r)//g
        {
            mid=(l+r)/2;
            if(check(mid)){
                ans=mid;
                r=mid-1;
            }
            else l=mid+1;
        }
        cout<<ans;
    }
    View Code

    正在研究队列的方法……

    听说初赛前写博客RP++

    那么希望NOIP2018 初赛 RP++!

  • 相关阅读:
    爬取豆瓣电影信息
    MongoDB的聚合操作以及与Python的交互
    matplotlib简单示例
    MongoDB基本操作
    K近邻算法
    Scrapy爬取博客园精华区内容
    爬虫失败
    Markdown基本使用方法
    UITableViewCell高度自适应变化
    KVO和NSNotification
  • 原文地址:https://www.cnblogs.com/lincold/p/9781133.html
Copyright © 2020-2023  润新知