Ice Cream Balls
先考虑如果每个冰淇淋球不相同时的情况数。设有 种不同的冰淇淋球,显然有:方案数 。
现在已知 ,直接求解这个关于 的方程的正数解,即 。
但是在大部分情况下,这个式子并不能得到一个正整数解。也就是说,冰激凌球会有重复的。想一想如何知道要有几个重复的呢?
看一下这个例子:。他能做出几种不同的冰淇淋?
这里有 个 ,不管选用哪个都是一样的。我们先将它们看为 个,这样就变成了 个互不相同的冰淇淋球,有 种。但是初始时的 个 也可以做成一种冰淇淋,因此总的方案数还要 ,即 种。
从上述过程能看出来,有几组重复的冰淇淋球,方案数 就会多几。
我们在上面讨论的只有 个相同的冰淇淋球,那么可能会出现 个或更多相同的冰淇淋球吗?
如果有 个相同的冰淇凌球,答案的贡献仍然只会 ,但是却浪费了一个冰淇凌球!这与题目要求的最小化 不符合,因此不会出现 个或更多的重复冰淇凌球。
由此我们就可以尝试推导通式了。先根据 求方程 的正数解,即 。设 。当 个冰淇凌球互不相同时,总共的方案数为 ,但是这可能不足 ,我们需要相同的冰淇凌球来补全剩下的。每多一组相同的冰淇凌球方案数会 ,我们只需要再变出 个与前面有重复的冰淇淋球即可让最终的方案数等于 。这些冰淇凌球贡献出了 种方案,早已构造出的方案数为 ,则最终答案为 。
稍微有些混乱,设输入为 ,这是最后的结论:
结论题应该就不用给代码了吧……
最后注意精度,建议 long double
,就可以愉快通过了。