【XSY3527】饮料

【XSY3527】饮料

Solution

首先钦定最后的答案 \(A\)。于是你给每个饮料体积都乘上 \(A\),每瓶的体积就会是 \(S = \sum a_i\)

引理1

Lemma:\(a\) 种饮料一定能放进 \(a-1\) 瓶里。

Proof: 我们采用归纳法,显然 \(a=2\) 时满足条件。

假如 \(a=k\) 时满足,则考虑 \(a=k+1\)。考虑提出这 \(k+1\) 种饮料的最大值和最小值,假如它们加起来不到 \(S\),那么剩下的 \(k-1\) 种的值的和就至少为 \((k-1)S\),最大值至少为 \(S\) ,矛盾。于是最大值和最小值加起来必然超过 \(S\),这就很好构造了。

引理2

Lemma: 假如存在一种方案把 \(a\) 种饮料放入 \(b\) 个瓶子,则一定有一种方案把这些瓶子划分为 \(a-b\) 组,使得每一组内若有 \(x\) 种饮料,则有 \(x-1\) 个瓶子。

Proof: 考虑构造一个图 \(G(V,E)\),其中 \(V\)\(b\) 个瓶子,\(E\) 为每种饮料“分裂”产生的边。每种饮料每分裂一次,就产生一条新的边。(也就是说,一种饮料被分为 \(k\) 份,就会产生 \(k-1\) 条顺次连接每一份的边。)特别地,一种饮料占满了一个瓶子,我们对这个瓶子连个自环。

这个图显然一共会有 \(2b-a\) 条边,总共的 \(|E|-|V|=b-a<0\)。考虑每个连通块,每个连通块的 \(|E|-|V| \geq -1\)。而当一个连通块的\(|E|-|V| = -1\) 时,我们发现这个连通块内有 \(|V|\) 个瓶子,而恰有 \(|V|+1\) 种饮料。对于\(|E|-|V| \ge 0\)的,我们必然能找到足够的 \(-1\) 的连通块,和这个连通块分到一组,于是这样也能构成满足条件的组(感性理解,如果 \(-1\) 不够,总和也就不可能 \(<0\))。

这样我们就证完了。

最后从小到大枚举可能的答案(显然最大到 \(n-1\)),先把每个数乘上 \(A\) 并减去 \(S\),这样每个组的和就都是 \(-S\) 了,然后用状压 DP,求出每个子集最多能构成的组数,暴力转移即可。

tips: 显然如果组数更多,也能凑出合法方案。

posted @ 2022-01-07 21:59  FakeDragon  阅读(27)  评论(0编辑  收藏  举报