关于非int类型求解

来源:9-7 面试中的0-1背包问题 Partition Equal Subset Sum

慕粉4405724

2020-10-12

就以本章内容为例, 如果我们给的数组是带小数的,也就是nums里是带小数的 , 那么当我们定义状态的时候, 假如s表示数组和的一半,那么我们就不能用memo[n][s]来表示 选n个数使得n个数之和等于s,因为s是带小数的 数组表示的话 行列应该都不带小数。那么在这种情况下,我们该怎么定义状态和用数组来表示memo或dp呢?
就比如零钱换整这个问题, 如果给的零钱coins里面不是整数,而是带小数的,比如一分 一毛 一块这种,那这个时候还能用dp吗,用的话那个数组该怎么定义呢?谢谢老师!

写回答

1回答

liuyubobobo

2020-10-12

对于你举的换零钱的例子,我们应该将 coins 里的小数转换成整数。因为零钱的精度最多到达“分”的水平,所以所有的数据乘以 10,也就是用分来表示钱,就 ok 了。


更一般的,如果数据是任意小数的话,不能使用这种 dp 方法解决。此时,背包问题是一个 np 难的问题。


继续加油!:)

0
0

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程