题解 1886: 蓝桥杯2017年第八届真题-包子凑数

来看看其他人写的题解吧!要先自己动手做才会有提高哦! 
返回题目 | 我来写题解

筛选

动态规划,标准解

解题思路:这一题有两个难点:1为能否算出所有的能凑成的数(以10000为最大界限,因为Ai最大为100,N也才为100,10000足够代表所有的数了),2为如何判断凑出来的数是否为无限个。第一个难点:先找到s,接下来的问题就变成了:用a1...an,在1-s-1之间能凑成多少个数,用递归就能解决。

蓝桥杯2017年第八届真题-包子凑数 (C++代码)

摘要:解题思路:另数组全部为0,能够装出来的设为1(遍历大数组,不停的往后迭代,若b[i-a[j]]不是0,即可赋值,具体如下),最后数数注意事项:判断公约数 哦参考代码:#include <iostrea……

蓝桥杯2017年第八届真题-包子凑数 -题解(C++代码) 完全背包 + 暴力 + 空间优化

```cpp思路:所有背包类问题,一定要知道一点,当前第i个物品进不进背包,进背包后的结果是不是最优的,背包ok之后再来一波暴力,直接甩个背包容量100W,如果超过10w个数拼不出来,就认为有无限个数拼不出来空间优化:滚动数组ps:实际上这道题是欧几里得+背包的题首先如果N种蒸笼的包子数是互质的,

蓝桥杯2017年第八届真题-包子凑数 -题解(C++代码)

```cpp/*包子凑数小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。

蓝桥杯2017年第八届真题-包子凑数 -题解(C++代码)思路清晰、易懂

###解题思路:###这里用到裴蜀定理:任意两个数的组合必定是他们gcd的任意两个数的组合必定是他们gcd的倍数。同样可以推广到更多数:如果这些数的gcd是d,那么他们的组合是d的倍数,如果d不是1,那么必然有无限个数无法被组合出来。##首先结论是如果所有的数的最大公约数不为1,