分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

bzoj 1029: [JSOI2007]建筑抢修【贪心+堆】

发布时间:2023-09-06 02:07责任编辑:蔡小小关键词:暂无标签

第一想法是按照结束时间贪心,但是这样有反例
所以先按照t贪心,能选则选,把选的楼的持续时间放进大根堆里,当当前的楼不能选的时候如果当前的持续时间比大根堆里最大的要小,就用这个替换最大,这样总数不变但是时间缩短了

#include<iostream>#include<cstdio>#include<queue>#include<algorithm>using namespace std;const int N=150005;int n,ans;struct qwe{ ???long long l,t;}a[N];bool cmp(const qwe &a,const qwe &b){ ???return a.t<b.t;}long long read(){ ???long long r=0,f=1; ???char p=getchar(); ???while(p>‘9‘||p<‘0‘) ???{ ???????if(p==‘-‘) ???????????f=-1; ???????p=getchar(); ???} ???while(p>=‘0‘&&p<=‘9‘) ???{ ???????r=r*10+p-48; ???????p=getchar(); ???} ???return r*f;}int main(){ ???n=read(); ???for(int i=1;i<=n;i++) ???????a[i].l=read(),a[i].t=read(); ???sort(a+1,a+1+n,cmp); ???long long tm=0; ???priority_queue<long long>q; ???for(int i=1;i<=n;i++) ???{ ???????if(tm+a[i].l<=a[i].t) ???????{ ???????????tm+=a[i].l; ???????????q.push(a[i].l); ???????????ans++; ???????} ???????else if(!q.empty()&&a[i].l<q.top()) ???????{ ???????????tm=tm-q.top()+a[i].l; ???????????q.pop(); ???????????q.push(a[i].l); ???????} ???} ???printf("%d\n",ans); ???return 0;}

bzoj 1029: [JSOI2007]建筑抢修【贪心+堆】

原文地址:https://www.cnblogs.com/lokiii/p/9409016.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved