背包问题及其变形

题目

  1. 两船载物
  2. POJ Find the Multiple
  3. 九度 棋牌寻宝扩展
  4. The fewest Coins
  5. Euro Efficiency
  6. Margarits on the River Walk

 

思路

1. 第二题在编程之美上以例题的形式给出, 书上给出的解法是剪枝. 这边是把只含01的数变成 1 + 10 + 100... 的问题

dp[i][j] 表示前 i 个数组成的mod n 余数为 j 的最小值

dp[i][j] = min(dp[i-1][j], dp[i-1][r]+10^i)

 

2. 第四五题类似. 找零问题. dp[i] 表示支付 i 钱需要的最少货币数. dp[v] = min(dp[v-w[i]], dp[v+w[i]]) + 1

注意, 因为需要找钱, 所以 v 设置的大一些

 

3. 第六题. 背包变形. 先枚举第 k 件物品是没被放下的重量最小的物品, 那么小于 k 的全部被放下了, 对剩下的背包进行 01 背包即可

转载于:https://www.cnblogs.com/zhouzhuo/p/3619029.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值