[題解](貪心/堆)luogu_P2107小Z的AK計劃

清明講過一道類似的,難度略大的:P3545 [POI2012]HUR-Warehouse Store

兩道題類似,都是暫時先把前面的加進候選集合里,如果超出限制的話就拿現在這個和前面的交換,

相當於不選前面那個選當前這個,應該是比較好的思想

這道題還有一個就是如果最優解要你走到那個點,那麼中間的路程是不可省略的,所以貪心時大可不考慮

反正實質上是個dp,取的是最大值

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=100010;
ll n,m,cnt,sum,ans,tmp;
struct node{
    ll x,t;
}a[maxn];
bool cmp(node a,node b){return a.x<b.x;}
int main(){
    scanf("%lld%lld",&n,&m);
    for(int i=1;i<=n;i++){
        ll x,t;scanf("%lld%lld",&x,&t);
        if(x<=m && t<=m)
        a[++cnt].x=x,a[cnt].t=t;
    }
    sort(a+1,a+1+cnt,cmp);
    priority_queue<ll>q;
    for(int i=1;i<=cnt;i++){
        sum+=a[i].t+a[i].x-a[i-1].x;//先選上這次的
        q.push(a[i].t);
        tmp++;
        while(sum>m){//要超過時限就替換最大的
            sum-=q.top();q.pop();
            tmp--;
        }
        ans=max(ans,tmp);//根本上是个dp,取f[1]~f[n]最大值
    }
    printf("%lld",ans);
}

另一題的代碼

//by jackpei
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
const int maxn=250010;
struct node{
    int val,t;
    node(int vv,int tt){
        val=vv,t=tt;
    }
    bool operator <(const node &b)const{
        return val<b.val;
    }
};

priority_queue<node>pq;
int n,a[maxn],b[maxn],vis[maxn];
ll res;
int ans;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)scanf("%d",&b[i]);
    for(int i=1;i<=n;i++){
        res+=(a[i]-b[i]),vis[i]=1,++ans;
        pq.push(node(b[i],i));
        while(res<0)
        res+=pq.top().val,vis[pq.top().t]=0,pq.pop(),ans--;
    }
    printf("%d\n",ans);
    for(int i=1;i<=n;i++)
    if(vis[i])printf("%d ",i);
}

原文地址:https://www.cnblogs.com/superminivan/p/10764060.html

时间: 2024-10-10 20:19:13

[題解](貪心/堆)luogu_P2107小Z的AK計劃的相关文章

小Z 系列 解题报告

在你谷刷题时偶然发现有这么一个系列,大概\(15\)道题目左右. 而且蒟蒻发现,这个系列的出题人基本上全是LittleZ大佬OrzOrz. 于是心血来潮,想把这个系列全部写完,然后便有了本文. \(P.s.:\)按蒟蒻自己的做题顺序排列,不一定代表难易. \(1.\)小Z的矩阵 因为题目中给出的特征函数\(G(A)\)是对\(2\)取模后的结果,所以很容易就可以发现除对角线以外所有元素对答案的贡献均为\(0\),所以第一步单累计对角线贡献即可. 然后我们发现每翻转一行一列对答案无影响,即刚好翻转

小Z爱序列(NOIP信(sang)心(bin)赛)From Fall_Dream(粗制单调队列&amp;单调栈的算法解析)

原题: 小Z最擅长解决序列问题啦,什么最长公共上升然后下降然后上升的子序列,小Z都是轻松解决的呢. 但是小Z不擅长出序列问题啊,所以它给了你一道签到题. 给定一个n个数的序列ai,你要求出满足下述条件的点对的数量. 假设点对是(i , j),max(l,r)是[l,r]当中最大的ai的值. 这个点对满足条件当且仅当i+1<j 且 ai < max(i+1,j-1) < aj 为了简单,保证输入的是一个1-n的排列.相信你已经会做了吧? 输入/输出格式 输入数据第一行有一个数字n,然后第二

bzoj 1034: [ZJOI2008]泡泡堂BNB 貪心

1034: [ZJOI2008]泡泡堂BNB Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1398  Solved: 727[Submit][Status] Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡堂.每一场比赛前,对阵双方的教练向组委会提交一份参赛选手的名单,决定了选手上场的顺序,一经确定,不得修改.比赛中

bzoj 2038 [2009国家集训队]小Z的袜子(hose) 莫队算法

2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 10239  Solved: 4659[Submit][Status][Discuss] Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命--具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两

【BZOJ2038】【莫队】小z的袜子

Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬.你的任务便是告诉小Z,他有多大的概率抽到两只颜色相同的袜子.当然,小Z希望这个概率尽量高,所以他可能会询问多个(L,R)以方便自己选择

P2117 小Z的矩阵

题目描述 小Z最近迷上了矩阵,他定义了一个对于一种特殊矩阵的特征函数G.对于N*N的矩阵A,A的所有元素均为0或1,则G(A)等于所有A[i][j]*A[j][i]的和对2取余之后的结果.举一个例子: 对于上图这个3*3矩阵A,G(A)=(1*1+1*0+1*1+0*1+1*1+1*0+1*1+ 0*1+0*0) mod 2=0 当然询问一个矩阵的G值实在是太简单了.小Z在给出一个N*N矩阵的同时将给你Q个操作,操作描述如下: 操作1:形如一个整数1和一个整数x,表示将第x行的元素全部“翻转”.

[題解](二分答案/單調隊列)luogu_P1419尋找段落

果然又抄的題解... 顯然答案具有單調性,而對于平均數計算的式子我們移一下項, 若s[l..r]>mid*(r-l+1)无解, 於是我們把每個數都減去一個mid,看和的正負即可,如果為正就可能有更大的平均數, 求子串和最大值可以用單調隊列維護, #include<bits/stdc++.h> using namespace std; const int maxn=100010; int n,s,t; double a[maxn],sum[maxn]; int b[maxn],q[maxn

UOJ422 小Z的礼物

小Z的礼物 小Z有一个神奇的自动售货机,里面有 \(n \times m\) 种物品,分别放在 \(n\) 行 \(m\) 列个格子中.每当小Z向自动售货机中投入一枚硬币,他就能获得一对相邻格子中的物品(已经获得的物品可能再次获得),获得每一对相邻格子中的物品的概率是相等的.在这 \(n \times m\) 种物品中,有一些物品是小Z喜欢的(小Z喜欢的用 * [星号] 表示,其他的用 .[英文句号] 表示),他想把这些物品包装成一份礼物.小Z想知道,期望投入多少枚硬币后,就可以获得这些他喜欢的

bzoj 2038 小Z的袜子(hose)(莫队算法)

2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 11542  Solved: 5166[Submit][Status][Discuss] Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命--具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两