
一、 数组的初始化
因为本题求的是凑足总额所需的最少硬币个数,所以dp数组里的每个元素都初始化为int的最大值
二、两种特殊情况
1、当凑足总额为0时,所需的最少硬币个数是0
2、当凑不足总额时,返回-1
三、遍历顺序
因为本题求的是凑足总额所需的最少硬币个数,所以凑成的方式可以是组合数也可以是排列数,两种方式都不影响最少个数的计算。所以遍历顺序可以是先遍历物品(求组合数)也可以是先遍历背包(求排列数)
四、递推公式
1、在写递推公式之前要先判断要凑成总额j-coins[i]所需的最少个数,是否是初始化时的值(即int的最大值INT_MAX)。因为int最大值是 2147483647,下面的递推公式加1就超过了,所以如果不是最大值才进行递推公式的计算,为了防止整数溢出。
2、递推公式dp[j] = min(dp[j-coins[i]]+1,dp[j]);的含义:在凑出j-coins[i]的基础上,再加一个值为coins[i]的硬币数,就凑出总额j所需硬币的最少个数;遍历所有硬币,取硬币个数最少的那个方案

490

被折叠的 条评论
为什么被折叠?



