首页 > 其他分享 >ABC 312 F Cans and Openers

ABC 312 F Cans and Openers

时间:2024-06-03 17:32:16浏览次数:24  
标签:ABC 罐头 312 Openers 个数 普通 much 拉环 开罐器

题意
现在有三种物品,给出的格式为(t[i],x[i])如下:

  1. 拉环罐头,被标记为t[i]=0,得到即食,可以得到x[i]的开心值。
  2. 普通罐头,被标记为t[i]=1,需要用开罐器打开,食用后可以得到x[i]的开心值。
  3. 开罐器,被标记为t[i]=2,使用后可以打开x[i]个普通罐头。

现在有N个这样的物品,你可以选择其中的M个,求你可以获得的最大开心值。

思路
首先我们可以很轻松的想到暴力的方法,即循环枚举选择的拉环罐头的个数和普通罐头的个数,然后求解,这样显然会超时。我们现在采取贪心的思路:当我们确定拉环罐头的个数i后,那么剩下的much-i个物品,我们肯定是喜欢其中普通罐头的个数是越多越好的,毕竟在拉环罐头的个数确定之后,唯一获得开心值的途径就是普通罐头,但是普通罐头需要开罐器打开,那么两者间就形成了一个相互制约的关系:普通罐头越多,开罐器越少,不能全部开完;普通罐头越少,开罐器越多,可以全部开完。这样大致形成了一个单调关系,那么这个时候我们可以采取二分答案:在much-i里二分出普通罐头的选取数量x,在保证能全部打开的情况下的最大普通罐头数量。那么这个时候check函数就很好些了,我们同时维护三个前缀和,当普通罐头的数量x确定后,我们就得到了开罐器的数量,即much-i-x,我们再查看开罐器前缀和的数量前缀和是否大于等于x即可。

代码
https://atcoder.jp/contests/abc312/submissions/54068470

标签:ABC,罐头,312,Openers,个数,普通,much,拉环,开罐器
From: https://www.cnblogs.com/lulu7/p/18229329

相关文章

  • ABC 313C Approximate Equalization 2
    题意现在给出一个数组a[n],现在你可以进行这种操作:选择i,j(1<=i,j<=n),使得a[i]=a[i]-1,a[j]=a[j]+1现在你可以进行无限次这种操作,现在需要你求出最少次数,使得数组中的最大值与最小值之间的差不超过1。思路我们考虑到每一次操作可以使得数组中的一个数加一,另一个数减一,那么无......
  • [ABC238E] Range Sums
    原题链接题解把这里的数字看成间隔,不要看成点假设已知能和\(l\)组成区间的端点集合\(A\)和以\(r\)组成区间的端点集合\(B\),这时候加入一个以\(l,r\)为左右端点的区间,那么在加入区间\(l,r\)之后,这两个集合可以合并code#include<bits/stdc++.h>usingnamespacestd......
  • abc356
    D1.5h没做出,E0.5h做出来啦?E有两个做法,第一个是枚举分子来计算分母对答案的贡献,另一种是枚举分母来求分子对答案的贡献。枚举分子来计算分母对答案的贡献需要用到数论分块,所以我们讲枚举分母来求分子对答案的贡献的写法。我们可以直接去枚举这个数是分母的情况。我们先考虑用......
  • ABC 312D题 Count Bracket Sequences
    题意给定一个非空的字符串,其由(,),?三个字符构成,其中?可以被(或者)给替换掉,求替换后的字符串是符合括号匹配的情况下的方案数。最后答案对mod=998244353取模思路应该算是一个板题,一开始的想法是往卡特兰数的方向思考,但是可能是我太水了没想出来,然后一想到卡特兰数的dp求法,就......
  • Atcoder ABC355 C~F
    C出题人太善良了,加强到\(10^5\)都没问题。考虑维护每条横线竖线两条对角线上被标记的点的个数,每次标记点后,判断是否有线上点全被标记。再考虑如何将点编号转为坐标,记编号为\(t\),推柿子:\[(x-1)\timesn+y=t\]\[nx+y=t+n\]\[x=\frac{t+n-y}{n}\]等同于找到\(y\)使得:\[n......
  • ABC 354
    B-AtCoderJanken2本来想开\(\rmvector<pair<string,int>>\)的,但发现其实没有必要,整数部分只需求和即可。另外,多个字符串按字典序升序排序可以直接存\(\rmvector\)后\(\rmsort\)。#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmai......
  • 「杂题乱刷」 AT_abc285_e
    好题。直接上代码吧。点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?打cf不要用umap!!!记住,rating是身外之物。该冲正解时冲正解!Problem:算法:思路:*/#include<bits/stdc++.h>usingnamespacest......
  • TabControl和TabItem的样式自定义:为什么要使用自定义模板?
    在WPF(WindowsPresentationFoundation)中,控件的外观和行为是通过控件模板(ControlTemplate)来定义的。TabControl和TabItem控件也不例外,它们的默认控件模板定义了这些控件的结构和视觉状态。在实际应用中,开发者可能会发现直接设置TabItem的某些属性(例如Background)时不会生效。这篇......
  • 实现Avalonia平台下低配版的Dock控件:实现TabControl的可关闭
    在弄一个项目,在WPF下用Dock控件,在Avalonia平台下实现也有一个Dock控件,但用起来有点复杂。Install-PackageDock.AvaloniaInstall-PackageDock.Model.Mvvm感兴趣的可以访问网站了解:https://github.com/wieslawsoltes/Dock其实本身用的比较简单,所以就想着,用TabControl来改一下......
  • s32k312 之 Relocating code in ITCM
    ITCM(指令紧耦合内存)是零等待内存,即CPU访问的时间ITCM将比访问闪存或SRAM更快。要使用ITCM内存,操作步骤如下:第一步:在链接器文件中定义ITCM部分。因为默认的链接器文件已经定义了ITCM内存区域int_itcm,所以我们可以从section定义开始__itcm_rom=__shareable_data_rom_end;......