\(\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的更多相关文章

  1. Solution -「CF 1342E」Placing Rooks

    \(\mathcal{Description}\)   Link.   在一个 \(n\times n\) 的国际象棋棋盘上摆 \(n\) 个车,求满足: 所有格子都可以被攻击到. 恰好存在 \(k\ ...

  2. Solution -「CF 1622F」Quadratic Set

    \(\mathscr{Description}\)   Link.   求 \(S\subseteq\{1,2,\dots,n\}\),使得 \(\prod_{i\in S}i\) 是完全平方数,并最 ...

  3. Solution -「CF 923F」Public Service

    \(\mathscr{Description}\)   Link.   给定两棵含 \(n\) 个结点的树 \(T_1=(V_1,E_1),T_2=(V_2,E_2)\),求一个双射 \(\varph ...

  4. Solution -「CF 923E」Perpetual Subtraction

    \(\mathcal{Description}\)   Link.   有一个整数 \(x\in[0,n]\),初始时以 \(p_i\) 的概率取值 \(i\).进行 \(m\) 轮变换,每次均匀随机 ...

  5. Solution -「CF 1586F」Defender of Childhood Dreams

    \(\mathcal{Description}\)   Link.   定义有向图 \(G=(V,E)\),\(|V|=n\),\(\lang u,v\rang \in E \Leftrightarr ...

  6. Solution -「CF 1237E」Balanced Binary Search Trees

    \(\mathcal{Description}\)   Link.   定义棵点权为 \(1\sim n\) 的二叉搜索树 \(T\) 是 好树,当且仅当: 除去最深的所有叶子后,\(T\) 是满的: ...

  7. Solution -「CF 623E」Transforming Sequence

    题目 题意简述   link.   有一个 \(n\) 个元素的集合,你需要进行 \(m\) 次操作.每次操作选择集合的一个非空子集,要求该集合不是已选集合的并的子集.求操作的方案数,对 \(10^9 ...

  8. Solution -「CF 1023F」Mobile Phone Network

    \(\mathcal{Description}\)   Link.   有一个 \(n\) 个结点的图,并给定 \(m_1\) 条无向带权黑边,\(m_2\) 条无向无权白边.你需要为每条白边指定边权 ...

  9. Solution -「CF 599E」Sandy and Nuts

    \(\mathcal{Description}\)   Link.   指定一棵大小为 \(n\),以 \(1\) 为根的有根树的 \(m\) 对邻接关系与 \(q\) 组 \(\text{LCA}\ ...

  10. Solution -「CF 487E」Tourists

    \(\mathcal{Description}\)   Link.   维护一个 \(n\) 个点 \(m\) 条边的简单无向连通图,点有点权.\(q\) 次操作: 修改单点点权. 询问两点所有可能路 ...

随机推荐

  1. 函数(C语言)

    目录 1. 函数的概念 2. 库函数 2.1 标准库和头文件 2.2 库函数的使用方法 3. 自定义函数 3.1 函数的语法形式 3.2 函数的举例 4. 形参和实参 4.1 实参 4.2 形参 4. ...

  2. fiddler限速配置&mock配置

    一.限速配置 1.开启性能选项 2.找到对应的参数入口 3.修改对应的从参数 解释下 这2个参数是如何做到限速的 4.request-trickle-delay(上传数据限制) 默认值是300,他的意 ...

  3. dotnet core微服务框架Jimu ~ 会员授权微服务

    提供授权服务,用户使用会员的用户名和密码获取 token, 带着 token 访问受保护的接口,如浏览和发布新闻. 有 2 个公开的 api: token: 获取 token; GetCurrentM ...

  4. 强化学习训练过程中的过度拟合(overfitting)

    相关: A.I. Learns to Drive From Scratch in Trackmania 本文讨论的是强化学习中的过度拟合问题,要知道强化学习中的过拟合和其他的监督.无监督学习的过拟合不 ...

  5. Maven的顶级功能——依赖管理

    依赖管理 依赖管理解决的问题 我们学完一个语言的语法之后,我们应该都能知道函数的引用或者类的创建等了.为了方便管理,我们就会把一些特定的功能实现写在一个代码文件中,我们只需要使用的时候导入就行了,这样 ...

  6. 揭秘!Vue3.5响应式重构如何让内存占用减少56%

    前言 Vue3.5版本又将响应式给重构了,重构后的响应式系统主要有两部分组成: 双向链表和 版本计数.我们在前两篇文章中我们已经讲过了 双向链表和 版本计数,这篇文章我们来讲讲为什么这次重构能够让内存 ...

  7. 使用SpringSecurity3实现RBAC权限管理

    1. What? 什么是权限管理? 具体可参见百度:http://baike.baidu.com/view/2108713.htm 名词备注: 数据级权限:百科内的权限管理一文解释的比较不错,但其中的 ...

  8. 性能检测工具之Lighthouse

    转载:https://mp.weixin.qq.com/s?src=11&timestamp=1618929340&ver=3020&signature=oXyx*RDLXjN ...

  9. 设计模式【3.3】-- CGLIB动态代理源码解读

    cglib 动态代理 cglib介绍 CGLIB 是一个开源项目,一个强大高性能高质量的代码生成库,可以在运行期拓展 Java 类,实现 Java 接口等等.底层是使用一个小而快的字节码处理框架 AS ...

  10. new Date()在ios下的坑

    坑位 最新在开发一个时间轴功能,在使用new Date()的时候发现在IOS下全是NaN. Why new Date("2018-04-27 11:11")在chrome,fire ...