首页 > 其他分享 >关于后悔贪心

关于后悔贪心

时间:2023-08-12 09:00:10浏览次数:44  
标签:int 耗时 报废 关于 升序 include 后悔 贪心

推荐一个大佬的文章【学习笔记】反悔贪心 - Koshkaaa (cnblogs.com)

建筑抢修

这个我一开始试图写二分的最长上升子序列,然后翻车了,乐。

这个题目我们按照报废时间升序排列,然后直接贪心的话可能会出现如果先修某个也能修成当前答案个而且耗时更少,只是因为报废时间长而没有贪心到的情况。

用大根堆堆顶是维护此时可行且耗时最多的。每次我们先把它加入堆。然后判断能不能修,如果不能修就弹出耗时最多的。如果它不是耗时最长的,那么就会达成后悔贪心的效果,由于我们是按照截止时间的升序排列的,保证后悔贪心的建筑此时一定是不会报废的(我们假设此时耗时最长的是i,耗时ki,截止时间是ti,那么此时加入的kj一定是小于ki的,而且我们按照报废时间升序排列,保证tj>ti,也就是说我们用j建筑替换i建筑的位置,总耗时会减少,i建筑能修完的,j建筑也必然能修完)。

查看代码
 #include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long ll;

struct bui
{
	int a,b;
	bool operator<(bui x)const
	{
		return a<x.a;
	}
}c[150005];
priority_queue<bui>ax;
ll n,t=0;
int ans;
signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>c[i].a>>c[i].b;
	sort(c+1,c+1+n,[](bui x,bui y)->bool{return x.b<y.b;});
	for(int i=1;i<=n;i++)
	{
		ax.push(c[i]);
		t+=c[i].a;
		if(t<=c[i].b)
		{
			ans++;
		}
		else
		{
			t-=ax.top().a;
			ax.pop();
		}
	}
	cout<<ans;
	return 0;
}

 

标签:int,耗时,报废,关于,升序,include,后悔,贪心
From: https://www.cnblogs.com/qbning/p/17624014.html

相关文章

  • 关于C语言输入输出的逗号问题(小细节)
    C语言的输入输出必须要遵循scanf和printf的格式,就是你是什么格式你就要输入什么。一、输入问题#include<stdio.h>intmain(){ inta,b;scanf("%d,%d",&a,&b); printf("a+b=%d",a+b);return0;}编辑 这个程序我们可以看到它运行的结果是错误的!为什么呢,因为我们在s......
  • 关于博客园星火燎原的一些小建议
    前言 还记得2016年的那个冬天,在工作几年以后,面试时总会被人问及类似【会什么,掌握了什么开发技能,工作中有哪些成绩】的问题,后来几经分析,发现也并没有什么可以拿得出手的东西,而且有些能力也不是自己说,面试官就会采信。加上有些项目是公司资源,涉及到信息安全,保密等因素,并不能拿出......
  • 关于FFmpeg释放 AVFormatContext*解码上下文的一些问题
    关于FFmpeg释放AVFormatContext*解码上下文的一些问题FFmpeg的一些常用函数用途结构体释放解码上下文FFmpeg的一些常用函数用途av_register_all()注册所有组件。avformat_open_input()打开输入视频文件。avformat_find_stream_info()获取视频文件信息。avcodec_find_d......
  • 贪心
    贪心的证明思路微扰对局部最优策略的任何微小改变都会是结果变差。在以排序为核心的策略中常常是临项交换扩展范围证明对局部最优策略的扩展不会使结果变差决策包容性证明最优策略提供的可能性包含其他任何策略提供的可能性反证法与数学归纳法......
  • 关于dev c++显示中文不显示,乱码和生成的可执行文件中文乱码
    1.不显示中文工具----编译器选项----显示-----去掉底下的复选框(第一个consolas下面)2,运行窗口中文乱码方法:1、工具—编译选项2、在第一个框中填入-fexec-charset=gbk3、勾选“编译器加入以下命令”4、重新编译一次以后运行。  ......
  • 关于 try... catch
    在逛论坛看见一个有意思的帖子,有点意思,记录下关于"异常捕捉"(trycatch)是否存在悖论?一些我觉得有用的回复,放到下面了,1.当某些错误状况难以完全避免时,try-catch可以用来控制错误扩散范围,防止整个程序崩溃。比如外部系统异常、网络中断等不可控因素。2.对于业务逻辑复杂......
  • 关于django中如何让页面跳转时携带当前页面的参数
    需求分析:处理逻辑步骤:在跳转到目标url时,先要获取当前页url所携带的参数#当前页urlhttp://127.0.0.1:9000/customer/list/?page=11#获取当前页url所携带的参数request.GET.urlencode()#paeg=11构造跳转页面的url#原本跳转页链接http://127.0.0.1:9000/custo......
  • 关于3D-AIGC的调研与探讨
    0、前言本文是自己最近在项目上的需要做的一些调研和自己的一些看法,以分享为主。2DAIGC(文生文、文生图、图生图)在今天大放异彩,产生了许多惊艳的效果,如ChatGPT系列、Imagen、DALLE2、StableDiffusion等,那我们自然会想到,如果延申到三维呢,如果能跳过Maya/Max/Blender/UE这些建模......
  • Java 编程中关于异常处理的 10 个最佳实践
    异常处理在编写健壮的Java应用的过程中,扮演着一个重要的角色。它并不是应用的功能需求,且需要优雅的处理任何错误情况,例如资源不可用,错误的输入,null输入等等。Java提供几个异常处理功能,并通过try,catch和  finally关键字内嵌在语言的本身。Java编程语言同样允许创建新的异常和使......
  • 关于微信公众号jssdk安全域名不能使用非80端口的解决方案
    第一步,先确认该域名的80/443端口能正常访问;第二步,登录公众号管理平台,进入《设置与开发--公众号设置--功能设置--JS接口安全域名》,下载验证文件并上传至域名能打开的网站内,站长应该都会操作,步骤省略;第三步,修改《JS接口安全域名》,此处不用填写非80/443端口,保存即可。......