Solution -「CF 808E」Selling Souvenirs
\(\mathscr{Description}\)
Link.
01 背包。
物品种类 \(n\le10^5\),背包容量 \(m\le3\times10^5\),单个物品体积 \(w\in\{1,2,3\}\),价值 \(c\le10^9\)。
\(\mathscr{Solution}\)
模拟赛 T3(不是说这题)什么降智选择结构,我直接开摆。
Motivation: 只有两种体积,我会 two-pointers。
构造一发,把 \(w=1\) 的物品转化成 \(w=2\) 的物品:枚举 \(w=1\) 选择的奇偶性,若为奇,最大者必选,其余两两打包;若为偶,直接两两打包。化归到 \(w=\{2,3\}\) 的情况,算上排序的复杂度就能 \(\mathcal O(n\log n)\) 做了。
騞然已解,如土委地。(
这种拆物品、组合物品的构造 trick 还挺厉害的,要多留意一下√
\(\mathcal {Code}\)
/*+Rainybunny+*/
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l, rep##i = r; i <= rep##i; ++i)
#define per(i, r, l) for (int i = r, per##i = l; i >= per##i; --i)
typedef long long LL;
inline char fgc() {
static char buf[1 << 17], *p = buf, *q = buf;
return p == q && (q = buf + fread(p = buf, 1, 1 << 17, stdin), p == q) ?
EOF : *p++;
}
template <typename Tp = int>
inline Tp rint() {
Tp x = 0, s = fgc(), f = 1;
for (; s < '0' || '9' < s; s = fgc()) f = s == '-' ? -f : f;
for (; '0' <= s && s <= '9'; s = fgc()) x = x * 10 + (s ^ '0');
return x * f;
}
const int MAXN = 1e5;
int n, m;
std::vector<int> buc[3];
inline LL solve() {
std::sort(buc[1].begin(), buc[1].end(), std::greater<int>());
LL ret = 0, sum = 0;
int p = 0, q = 0;
while (p < buc[2].size() && (p + 1) * 3 <= m) sum += buc[2][p++];
while (q < buc[1].size() && (q + 1) * 2 + p * 3 <= m)
sum += buc[1][q++];
ret = std::max(ret, sum);
while (~--p) {
sum -= buc[2][p];
while (q < buc[1].size() && (q + 1) * 2 + p * 3 <= m)
sum += buc[1][q++];
ret = std::max(ret, sum);
}
return ret;
}
int main() {
n = rint(), m = rint();
rep (i, 1, n) {
int w = rint(), c = rint();
buc[w - 1].push_back(c);
}
std::sort(buc[0].begin(), buc[0].end(), std::greater<int>());
std::sort(buc[2].begin(), buc[2].end(), std::greater<int>());
auto tmp(buc[1]);
for (int i = 0; i + 1 < buc[0].size(); i += 2) {
buc[1].push_back(buc[0][i] + buc[0][i + 1]);
}
LL ans = solve();
if (buc[0].size()) {
buc[1] = tmp;
for (int i = 1; i + 1 < buc[0].size(); i += 2) {
buc[1].push_back(buc[0][i] + buc[0][i + 1]);
}
--m, ans = std::max(ans, solve() + buc[0][0]);
}
printf("%lld\n", ans);
return 0;
}
Solution -「CF 808E」Selling Souvenirs的更多相关文章
- Solution -「CF 1342E」Placing Rooks
\(\mathcal{Description}\) Link. 在一个 \(n\times n\) 的国际象棋棋盘上摆 \(n\) 个车,求满足: 所有格子都可以被攻击到. 恰好存在 \(k\ ...
- Solution -「CF 1622F」Quadratic Set
\(\mathscr{Description}\) Link. 求 \(S\subseteq\{1,2,\dots,n\}\),使得 \(\prod_{i\in S}i\) 是完全平方数,并最 ...
- Solution -「CF 923F」Public Service
\(\mathscr{Description}\) Link. 给定两棵含 \(n\) 个结点的树 \(T_1=(V_1,E_1),T_2=(V_2,E_2)\),求一个双射 \(\varph ...
- Solution -「CF 923E」Perpetual Subtraction
\(\mathcal{Description}\) Link. 有一个整数 \(x\in[0,n]\),初始时以 \(p_i\) 的概率取值 \(i\).进行 \(m\) 轮变换,每次均匀随机 ...
- Solution -「CF 1586F」Defender of Childhood Dreams
\(\mathcal{Description}\) Link. 定义有向图 \(G=(V,E)\),\(|V|=n\),\(\lang u,v\rang \in E \Leftrightarr ...
- Solution -「CF 1237E」Balanced Binary Search Trees
\(\mathcal{Description}\) Link. 定义棵点权为 \(1\sim n\) 的二叉搜索树 \(T\) 是 好树,当且仅当: 除去最深的所有叶子后,\(T\) 是满的: ...
- Solution -「CF 623E」Transforming Sequence
题目 题意简述 link. 有一个 \(n\) 个元素的集合,你需要进行 \(m\) 次操作.每次操作选择集合的一个非空子集,要求该集合不是已选集合的并的子集.求操作的方案数,对 \(10^9 ...
- Solution -「CF 1023F」Mobile Phone Network
\(\mathcal{Description}\) Link. 有一个 \(n\) 个结点的图,并给定 \(m_1\) 条无向带权黑边,\(m_2\) 条无向无权白边.你需要为每条白边指定边权 ...
- Solution -「CF 599E」Sandy and Nuts
\(\mathcal{Description}\) Link. 指定一棵大小为 \(n\),以 \(1\) 为根的有根树的 \(m\) 对邻接关系与 \(q\) 组 \(\text{LCA}\ ...
- Solution -「CF 487E」Tourists
\(\mathcal{Description}\) Link. 维护一个 \(n\) 个点 \(m\) 条边的简单无向连通图,点有点权.\(q\) 次操作: 修改单点点权. 询问两点所有可能路 ...
随机推荐
- DRF-Serializers序列化器组件源码分析及改编
1. 源码分析 注意:以下代码片段为方便理解已进行简化,只保留了与序列化功能相关的代码 序列化的源码中涉及到了元类的概念,我在这里简单说明一下:元类(metaclass)是一个高级概念,用于定义类的创 ...
- PME算法简单Python实现
技术背景 在前面的两篇博客中,我们分别介绍了Ewald算法求解静电势能和基于格点拉格朗日插值法的PME算法.在多种计算优化算法(Ewald求和.快速傅里叶变换.格点拉格朗日插值.截断近似)的加持下,使 ...
- img标签src引用网络图片,响应403的解决方法
在html页面加入<meta name="referrer" content="no-referrer">标签,就可以解决页面加载网络图片的问题, ...
- jenkins集成cucumber-resport报告
需要安装的jenkins插件-Cucumber Reports jenkins版本:2.273 jenkins插件下载地址:点击下载 下载插件后通过jenkins插件管理上传已下载好的插件即可 等待j ...
- flutter TabBarView 动态添加删除页面
在TabBarView 动态添加页面后删除其中一个页面会导致后面的页面状态错误或删除的页面不正确.出现这种问题是由于创建子页面时没有为子页面设置唯一的key导致的. 1 void addNewPage ...
- 很干,但实用——4G模组供电设计及其选型推荐
4G模组的外部电源供电设计十分重要,对系统稳定.射频性能都有直接影响. 怎么让工程师朋友们在应用开发中少走弯路呢? 我将以Air780E为例,陆续分享系列实用干货.无论你是专家还是菜鸟,无论你是否 ...
- IPC-7711/21D, IPC-7711D, IPC-7721D 电子组件的返工、修改和维修,验收标准。Rework, Modification and Repair of Electronic Assemblies
IPC-7711/21 - Revision D - Standard Only: Rework, Modification and Repair of Electronic Assemblies T ...
- Python 潮流周刊#78:async/await 是糟糕的设计(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- 成为JavaGC专家Part I — 深入浅出Java垃圾回收机制
对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java应用. 这仅仅代表我个人的意见,但我坚信一个 ...
- Python 爬虫必备杀器,xpath 解析 HTML
最近工作上写了个爬虫,要爬取国家标准网上的一些信息,这自然离不了 Python,而在解析 HTML 方面,xpath 则可当仁不让的成为兵器谱第一. 你可能之前听说或用过其它的解析方式,像 Beaut ...