首页 > 其他分享 >[学习笔记]反悔贪心

[学习笔记]反悔贪心

时间:2023-10-12 22:26:18浏览次数:37  
标签:int AK 笔记 反悔 ans 例题 贪心

顾名思义,就是对之前的一些决策进行反悔的贪心。

比如你去爬山,你爬到比之前都高的一个点,你就可以认为这是最高的山,

再往上爬,爬到了一个更高点,你就可以撤回一条消息反悔,认为这个点才是最高点。

接下来看几道例题,理解一下

例题

例题 1

P2949 [USACO09OPEN] Work Scheduling G

显然的贪心,将每个工作的截止时间从小到大排序,优先做那些急的事情。

可能有一些事虽然急,但无关紧要,有的不急,但是能收获更多,所以要用堆来维护已经选择的工作收获,收获小的放在前面,遇到收获更大的就替换掉。

Accepted Code
/*Code By Manipula*/
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 5;
struct Work{
	int s, v;
}a[N];
int n, ans, sum, tot;
bool cmp(Work aa, Work bb){return aa.s < bb.s;}
priority_queue<int, vector<int>, greater<int> > q;
signed main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)cin >> a[i].s >> a[i].v;
	sort(a + 1, a + n + 1, cmp);
	for (int i = 1; i <= n; i++)
	{
		sum += a[i].v; q.push(a[i].v); tot++;
		if (tot > a[i].s)
		{
			sum -= q.top();
			q.pop();
			tot--;
		}
		ans = max(ans, sum);
	}
	cout << ans;
	return 0;
}

例题 2

P4053 小Z的AK计划

贪心,按照坐标排序,如果这个机房可以 AK,那么选择,并加入到大根堆中,否则看如果有的 AK 时间比 AK 当前机房的时间长,可以选择放弃,直到可以选择当前机房,并用 \(ans\) 保存下最佳答案。

Accepted Code
/*Code By Manipula*/
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 5;
struct AK{
	int x, t;
}a[N];
int indx, ans, now;
bool cmp(AK aa, AK bb){return aa.x < bb.x;}
priority_queue<int> q;
signed main()
{
	int n, limit;
	cin >> n >> limit;
	for (int i = 1; i <= n; i++)cin >> a[i].x >> a[i].t;
	sort(a + 1, a + n + 1, cmp);
	for (int i = 1; i <= n; i++)
	{
		now++; indx += a[i].x - a[i - 1].x + a[i].t; q.push(a[i].t);
		while (!q.empty() && indx > limit)
		{
			now--;
			indx -= q.top();
			q.pop();
		}
		if (indx > limit)break;
		ans = max(ans, now);
	}
	cout << ans;
	return 0;
}

习题

P4053 [JSOI2007] 建筑抢修

P3545 [POI2012] HUR-Warehouse Store

再推荐个题单吧 qwq

反悔贪心

标签:int,AK,笔记,反悔,ans,例题,贪心
From: https://www.cnblogs.com/Manipula/p/17760728.html

相关文章

  • CF1801C 做题笔记
    题目链接一道需要挖掘一些性质的dpt,居然独立想出来了。本蒟蒻太菜了只会树状数组的做法,单调栈不会。先考虑只管对答案有贡献的音乐,这当然是正确的,因为我们可以把对答案没有贡献的音乐放到最后。对于每一首乐曲,我们也能对它进行一个简单的处理来模拟听的过程,维护一个值$lst$,......
  • Kruskal重构树 学习笔记
    前言也许在看这篇文章之前,你可以看看这篇文章?前置知识:\(kruskal\)求最小生成树,并查集……算法介绍问题引入两个点之间的所有简单路径上最大边权的最小值。我们定义\(u\tov\)路径的瓶颈为,路径上的边权最大值。那么下图的瓶颈就为4:同时一条路径也可能有多个瓶颈,求最......
  • 笔记软件快捷键
    Ctrl+shift+【有序列表Ctrl+shift+】无须列表标题:Ctrl+1/2/3/4/5标题大小Ctrl+0段落增大标题级别:Ctrl++减小标题级别:Ctrl+-增加缩进Ctrl+]减少缩进Ctrl+]选中一整行:CTRL+L选中单词:CTRL+D选中相同格式的文字:ctrl+E跳转到文章开头:CTRL+Home跳转到文章结尾:CTRL+e......
  • 树上的最大权连通块:一种换根动态规划与贪心算法的结合
    树上的最大权连通块:一种换根动态规划与贪心算法的结合在计算机科学中,树是一种非常特殊的数据结构,不仅因为它们在存储数据时的效率,还因为它们提供了一种非常直观且强大的方式来解决各种问题。今天,我们将探讨一种特殊类型的问题,即在一棵树中找到一个特殊的子集或连通块,该子集中的节......
  • 动态规划——树形DP 学习笔记
    动态规划——树形DP学习笔记引入前置知识:树基础。树形DP,即在树上进行的DP,最常见的状态表示为\(f_{u,\cdots}\),表示以\(u\)为根的子树的某个东东。本文将讲解一些经典题目(树的子树个数、树的最大独立集、树的最小点覆盖、树的最小支配集、树的直径、树的重心、树的中心),以......
  • 2023/10/12 学习笔记2
    一、信号与数制转换1.1 信号相关概念1.1.1 信息:不同领域对信息有不同的定义,一般认为信息是人们对现实世界事物的存在方式或运动状态的某种认识。表示信息的形式可以是数值、文字、图形、声音、图像及动画等。1.1.2 数据:数据是用于描述事物的某些属性的具体量值。1.1.......
  • Slime Escape (CF D) (贪心, 双指针最大有效权值单调增长)
     补充:每次操作可以往左或者右走一步 思路:性质:以一边为重点使劲走,然后利用另外一边来给自己权值变大当这边要死了,就把这边回退到最大值,在走另一边,看另一边能到哪,这样每次都可以扩展最大值,于是利用双指针?也不是双指针,就是l,r分别贪心地向左和......
  • docker 部署.net core ,用于博主本人笔记
     安装dockerdocker部署netcore步骤1、下载最新netcore支持dockerpullmcr.microsoft.com/dotnet/core/aspnet:latest2、发布netcore项目linux环境需要在发布文件夹内创建Dockerfile,并添加如下内容--------------------------以下为dockerFile内容--------------------......
  • 二次离线莫队笔记
    前言莫队可以解决许多其他数据结构无法完成的问题,正在很多其他问题上也可以拿部分分甚至满分,只因其复杂度为小常数\(O(n\sqrtn\timesk)\)其中\(k\)是单次扩张以及收缩的复杂度,而二离莫队可以在答案可差分的情况下达到\(O(n\sqrtn+n\timesk)\)起源lxl把二次离线莫......
  • 网络流笔记
    前言粗略地讲一下吧,大概能理解就行理论部分借鉴了oi-wiki,有问题欢迎指出网络流网络是一个特殊有向图$G=(V,E)$,特殊在于有源点$s$和汇点$t$首先网络流图中每条边$(u,v)$都有一个容量$c(u,v)$介绍流函数$f(u,v)$,指$u$到$v$流量所以就会有流量守恒,即$0\leq......