• noip模拟题 Market


    题面描述:

    avatar

    数据范围:

    avatar

    Solution:

    我们发现(v)很小,但是(M)很大,考虑转化一下一般的背包

    我们用(f[v])来表示拿到价值为(v)的物品需要付出的最少代价,特别的,当(v)无法被凑出来,它需要用获得更大价值的代价来填充

    那么此时我们发现,他是一个单调上升的函数,则我们把物品和询问按照时间升序,再二分查找即可

    Code:

    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    const int N=311;
    const int M=1e5+11;
    int n,m,ans[M];
    long long g[M],sum;
    struct Item{int t,c,v;}s[M];
    struct Thing{int t,v,id;}q[M];
    inline bool cmp1(Item a,Item b){return a.t<b.t;}
    inline bool cmp2(Thing a,Thing b){return a.t<b.t;}
    int read(){
        int x=0,f=1;char ch=getchar();
        while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
        while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
        return x*f;
    }
    int calc(int val){
        int l=1,r=sum,re=0;
        while(l<=r){
            int mid=l+r>>1;
            if(g[mid]<=val) re=mid,l=mid+1;
            else r=mid-1;
        }return re;
    }
    void solve(){
        for(int i=1;i<=sum;i++) g[i]=192608171926;
        g[0]=0;int now=1;sum=0;
        while(now<=m&&q[now].t<s[1].t) ++now;
        for(int i=1;i<=n;i++){
            if(now>m) break;
            sum+=s[i].v;
            for(int j=sum;j;j--)
                if(j>=s[i].v) g[j]=min(g[j],g[j-s[i].v]+s[i].c);
            for(int j=sum-1;j;j--) g[j]=min(g[j],g[j+1]);
            while(now<=m&&(q[now].t<s[i+1].t||i==n)){
                ans[q[now].id]=calc(q[now].v);++now;
            }
        }
    }
    signed main(){
        n=read(),m=read();
        for(int i=1;i<=n;i++){
            s[i].c=read(),s[i].v=read(),s[i].t=read();
            sum+=s[i].v;
        }
        for(int i=1;i<=m;i++)
            q[i].t=read(),q[i].v=read(),q[i].id=i;
        sort(s+1,s+n+1,cmp1);
        sort(q+1,q+m+1,cmp2);
        solve();
        for(int i=1;i<=m;i++) printf("%lld
    ",ans[i]);
        return 0;
    }
    
  • 相关阅读:
    JS基础语法
    JS的初步了解
    CSS初步学习
    HTML标签
    初步了解HTML
    LEGB规则
    Python面试题练习
    闭包
    Caché,Cache数据库连接并查询数据
    Caché,Cache数据库下载
  • 原文地址:https://www.cnblogs.com/NLDQY/p/11562326.html
Copyright © 2020-2023  润新知