1 条题解
-
0
自动搬运
来自洛谷,原作者为

周子衡
Shadow is the light!搬运于
2025-08-24 22:23:51,当前版本为作者最后更新于2020-08-20 17:15:31,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
这篇题解将给出详细的证明。如果我能拿到自己考场代码应该会贴(不过看起来希望渺茫)。
看到题目感觉无从下手。观察数据范围,发现一个奇怪的限制 ,而且还专门给出了 和 的部分分,我们不妨从此入手思考。
对于 ,枚举 发现都一定有解。我们不妨尝试直接将 向 转化:不失一般性,令 。我们发现应该要尽量先用光少的那些材料,而且少的尽量要配大的。可以证明下面两条引理:
引理一:。
证明: 用反证法。假设 ,那么 ,则 。显然矛盾,故命题得证。
引理二:。
证明: 用反证法。假设 ,那么 ,则 $d_1+d_2+\cdots+d_n\leq d_1+(n-1)(k-1-d_1)=(n-1)k-(n-1)-(n-2)d_1 < (n-1)k$,矛盾,所以 。
综合上面两条引理,我们可以一次把 用光,同时用 填补空缺,显然是可行的。这样就成功将 的情况转化成了 的情况。而 时直接放一起即可。综上,我们成功对于 的任意情况构造出了一组解。
直接模拟的时间复杂度为 ;可以简单用数据结构优化到 ,虽然本题中没有必要。
对于 的情况,考虑向 转化。同上令 ,显然可证
引理三: 。
证明: 如果 ,则 。矛盾。
所以我们用 单独做一道菜,就可以令 减少 。这样就转化为 的情况了。时间复杂度 或 。
接下来是最后的部分:。
先手推一下 较小的情况,发现 必定无解, 是有解当且仅当存在两个 加起来等于 。也就是说,我们似乎要将这个问题向 转化;把 个物品分为两个集合,如果两个集合都能找到 的方法,那么加起来就有一个 的方法了。也就是说
引理四: 问题有解当且仅当能找到一个集合 的子集 ,使得:
- 记 为 的大小,则 。
证明:
-
充分性: 显然对于集合 和 ,都是一个满足 的子问题,而我们已经证明过了 必定有解,则对 分别构造解即可。
-
必要性: 考虑构造一张图 , 中有 这些节点,如果两种原料在一道菜里同时选用则连一条边。发觉 中至多有 条边,则 一定不连通。设 有一个连通块 ,则相当于 必须满足 的有解约束,即 。证毕。
总之,只要我们能找到一些物品的集合 满足 ,就能构造出符合题意的解。如何求这个 呢?显然考虑做背包 DP。而由于右边带了一个 ,我们再做一步转化,将 移到左边,即要求
这样就变成一道经典的 01 背包问题了。直接求解的时间复杂度为 ,用 bitset 优化即可做到 。
其他想说的话:
- 这题确实是一道锻炼思维的题,据我个人观察,考场上坐我旁边的选手们人均思考了一小时以上。
- 我大致想出了正解的思路,但没有想出 bitset 优化,前边 的特判又挂了(哈哈哈哈哈),感觉 没什么, 确实是自己的水平问题……
- 希望以后 NOI 能多出今年这样的思维好题吧。
- 1
信息
- ID
- 5856
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 7
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者