ABC374E 题解

news/2024/10/6 10:01:45

好题。爱做。


标签:二分。

求最大的最小值,考虑二分答案。然后问题就转化成了(求 \(n\) 次):有两种物品,每种物品有一个代价和价值,求获得不少于给定价值所需的最小代价。

下文记物品的代价为 \(w\),价值为 \(v\),所拿的数量为 \(cnt\)

假设有两种物品 \(S\)\(T\)\(S\) 物品的性价比(价值 / 代价)比 \(T\) 高,那么有一种较优的拿法是全拿 \(S\)。但手玩一下发现,这不一定是最优的。那我们从大到小枚举所拿 \(S\) 物品的个数,剩下的价值用 \(T\) 物品补齐,然后计算出代价,取最小值即可。

但是直接枚举是会 TLE 的。注意到当我们拿了很多的 \(T\) 物品的时候,我们把若干 \(T\) 物品替换成相同价值的 \(S\) 物品会更优。具体地说,假如 \(cnt_T \times v_T\)\(v_S\) 的倍数,那我们只需要把所有的 \(T\) 物品换成 \(\frac{cnt_T \times v_T}{v_S}\)\(S\) 物品即可。

所以,\(cnt_T\) 的上界为 \(\text{lcm}(v_T, v_S) / v_T\),再拿多就不优了。由于 \(\text{lcm}(v_T, v_S) \le v_T \times v_S\),同理可以计算出少拿 \(S\) 物品的个数的上界,因此枚举上界不会超过 \(10^4\)

然后就做完了。时间复杂度 \(O(n k\log V)\)\(k\) 是单组枚举上界,不超过 \(10^4\)\(V\) 是二分价值的值域,不超过 \(10^9\)

(我赛时更豪放一点,\(k\) 开到了 \(10^5\)

code :

#include <iostream>
#include <cstdio>
using namespace std;typedef long long ll;
typedef double db;
const int N = 110;
int a[N], b[N], c[N], d[N], n;
ll X;ll get(ll i, ll x) {db c1 = b[i] * 1.0 / a[i], c2 = d[i] * 1.0 / c[i];if(c1 > c2) swap(a[i], c[i]), swap(b[i], d[i]);ll cnt1 = (x + a[i] - 1) / a[i], res = 1e18;int k = 0;while(~cnt1 && k <= 100000) {ll cnt2 = (max(0ll, x - cnt1 * a[i]) + c[i] - 1) / c[i];res = min(res, cnt1 * b[i] + cnt2 * d[i]);cnt1--;k++;}return res;
}
bool chk(ll mid) {ll res = 0;for (int i = 1; i <= n; i++) res += get(i, mid);return res <= X;
}int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n >> X;for (int i = 1; i <= n; i++) cin >> a[i] >> b[i] >> c[i] >> d[i];ll l = 0, r = 1e9;while(l < r) {ll mid = (l + r + 1) / 2;if(chk(mid)) l = mid;else r = mid - 1;}cout << l;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/68254.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Windows计划任务出现0x1错误结果

Windows计划任务出现0x1错误结果现象 解决方法 结果 现象 参考不少的文章,基本上都是说因为权限的问题,但试了N次都不行,仍然报0x1的错误结果,亲测解决方法说明如下; 1.脚本本身没问题,手动本地可以执行; 2.系统版本 Windows 10 专业工作站版 版本号 21H2 解决方法 在设…

面相快速入门教程2转化智慧

2 转化智慧 你的脸是遗传、环境和生活经历的产物。它展现了你的身份、经历和未来;它揭示了你独特的潜能,以及你需要什么才能感到幸福。你特征中的信息可以成为帮助你创造真正有意义和充实生活的绝佳资源。你所要做的就是照镜子。 事实上,你不需要知道什么特别的事情,就能从…

P10678 『STA - R6』月 题解

Solution 看了别的大佬的题解,感觉都是数学证明然后用树和图做的,看不懂啊。。。萌新瑟瑟发抖 用 vector 模拟树,然后贪心摸索做出来了。注意到要求最深叶子结点和最浅叶子结点的距离最短时的情况,那么此时根节点应该是树中度数最大的点,把树尽可能的拓宽,深度换宽度。 那…

学期(如2024-2025-1) 20241304 《计算机基础与程序设计》第2周学习总结

学期(如2024-2025-1)20241304 《计算机基础与程序设计》第2周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第二周作业)这个作业的目标 <…

Cisco Firepower 1000 Series FTD Software 7.6.0 ASA Software 9.22.1

Cisco Firepower 1000 Series FTD Software 7.6.0 & ASA Software 9.22.1Cisco Firepower 1000 Series FTD Software 7.6.0 & ASA Software 9.22.1 Firepower Threat Defense (FTD) Software - 思科防火墙系统软件 请访问原文链接:https://sysin.org/blog/cisco-firep…

从零开始学机器学习——网络应用

首先给大家介绍一个很好用的学习地址:https://cloudstudio.net/columns 今天,我们的主要任务是按照既定的流程再次运行模型,并将其成功加载到 Web 应用程序中,以便通过 Web 界面进行调用。最终生成的模型将能够基于 UFO 目击事件的数据和经纬度信息,推断出事件发生的城市地…

Cisco Firepower 4100 Series FTD Software 7.6.0 ASA Software 9.22.1

Cisco Firepower 4100 Series FTD Software 7.6.0 & ASA Software 9.22.1Cisco Firepower 4100 Series FTD Software 7.6.0 & ASA Software 9.22.1 Firepower Threat Defense (FTD) Software - 思科防火墙系统软件 请访问原文链接:https://sysin.org/blog/cisco-firep…

Cisco Firepower 9300 Series FTD Software 7.6.0 ASA Software 9.22.1

Cisco Firepower 9300 Series FTD Software 7.6.0 & ASA Software 9.22.1Cisco Firepower 9300 Series FTD Software 7.6.0 & ASA Software 9.22.1 Firepower Threat Defense (FTD) Software - 思科防火墙系统软件 请访问原文链接:https://sysin.org/blog/cisco-firep…