其他分享
首页 > 其他分享> > 蓝桥杯 包子凑数(完全背包、裴蜀定理)

蓝桥杯 包子凑数(完全背包、裴蜀定理)

作者:互联网

一、题目来源

OJ传送门

\(2017\)年蓝桥杯软件类省赛\(C++\)语言大学\(A\)组第\(8\)题"包子凑数",一道数论题。

2022年4月青少年蓝桥杯赛第二次省赛初级+中高级组第三题

这也太\(tm\)内卷了,拿这个来考三年级的小孩子!真是太\(BT\)了!还第三题!!!

二、解题思路

根据裴蜀定理,当所有种类的蒸笼包子数的最大公约数不为\(1\)时,凑不出的包子数为无限多,因为无论蒸笼怎么组合都必须得是\(gcd\)得倍数,\(gcd\)不为\(1\)一定会有凑不出的。

如果能够凑的出的有限,那么到达某个界限后都是凑得出的,这个界限为Ai*Ai=10000,或许会有人问为啥是这个数,这个具体证明我也搞不出,但可以模拟一下你取任意两个互质的数,如6,7,会发现42之后任意一个数都是可以通过6,7组合出来,姑且就当个结论记了八。然后就是对凑不出的数的一个求解,这个可以通过完全背包解决。

dp[i] 表示凑出i个包子的方法总数,简单说就是如果其>=1就凑得出,==0就凑不出。

状态转移方程: dp[i]=dp[i-第j种蒸笼包子数]+1 (dp[i-第j种蒸笼包子数]>=1) 当i-第j种蒸笼包子数是可以凑成的,那么我只需对其+第j种蒸笼包子数就可以凑成i个包子数。

标签:凑数,蓝桥,裴蜀,蒸笼,包子,dp,不出
来源: https://www.cnblogs.com/littlehb/p/16182199.html