n种砝码,每种两粒,小胖至少要采购mg的砝码重量,求有多少种方法
输入:7//n
1 2 3 4 5 10 20
88//mg
输出:4
(这是搜索吗,可是怎么搜,搜哪里
求解题思路和伪代码
这种求解方案的问题可以用深搜(可以用记忆化来优化,这里讲最基础的)
每一步需要枚举当前可用的砝码,然后将当前砝码标记为已用,并计入总重量,再进入下一步枚举。当总重量大于等于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
这个用蛮力的组合穷尽方法就好吧?
就是个背包问题,去学一下就会了,一个简单动态规划问题
运用背包,暴力,递归算法都可以😌求打赏
穷举和递归都可以