蓝桥杯 包子凑数(完全背包、裴蜀定理)
作者:互联网
一、题目来源
\(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