n种砝码,每种两粒,小胖至少要采购mg的砝码重量,求有多少种方法
输入:7//n
1 2 3 4 5 10 20
88//mg
输出:4
(这是搜索吗,可是怎么搜,搜哪里
求解题思路和伪代码
关于#c++#的问题:砝码问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
6条回答 默认 最新
- liu_zhоu 2022-08-29 20:15关注
这种求解方案的问题可以用深搜(可以用记忆化来优化,这里讲最基础的)
每一步需要枚举当前可用的砝码,然后将当前砝码标记为已用,并计入总重量,再进入下一步枚举。当总重量大于等于m就是边界条件,则可用方案数加一。
sum = 0 fama[n+1]//第i种砝码重量 flag[2n+1]//值表示当前编号的砝码是否可用,初始值为1,表示均可用 dfs(int ww = 0){ if(ww >= m) {//达到条件,方案数加一 sum++ return } for(int i = 1; i <= n * 2;i++) {//对于第k种砝码,它两个砝码的编号分别为2k-1和2k if flag[i] {//如果当前砝码可用 flag[i] = 0//标记为已经使用 dfs(ww + fama[i])//并考虑使用当前砝码的情况,在ww基础上加上当前砝码重量 flag[i] = 1//讨论完后,将当前砝码标记为未经使用 } } return }
若有疑惑请提出
望采纳awa本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报