宁波网站建设企业,移动互联网以什么为技术核心,淘宝客怎样做自己的网站推广,中国商业网太难了 但听了前面再听这道题感觉递推公式也不是不难理解 动规五部曲 dp[j]代表装满容量为j#xff08;也就是目标值#xff09;的背包最少物品数量递推公式#xff1a;dp[j] std::min(dp[j], dp[j - coins[i]] 1)当使用coins[i]这张纸币时#xff0c;要向前找到容量为… 太难了 但听了前面再听这道题感觉递推公式也不是不难理解 动规五部曲 dp[j]代表装满容量为j也就是目标值的背包最少物品数量递推公式dp[j] std::min(dp[j], dp[j - coins[i]] 1)当使用coins[i]这张纸币时要向前找到容量为j - coins[i]时所使用的最小物品数量而本次用到了coins[i]这张纸币所以总体上使用的纸币数量就又增加了1初始化 dp[0] 0非0下标初始化要有不同以往都是求max值所以初始化为0但本题要取min都设为0所有结果也就都是0了所以要将它们初始化成int的最大值 遍历顺序先外循环背包容量后内循环纸币面值与先外循环纸币面值后内循环背包容量都是计算数量的无论什么顺序关系都是没有影响的打印 class Solution {
public:int coinChange(std::vectorint coins, int amount) {std::vectorint dp(amount 1, INT_MAX);dp.at(0) 0;for (int i 0; i coins.size(); i) {for (int j coins.at(i); j amount; j) {if (dp[j - coins[i]] ! INT_MAX) {dp[j] std::min(dp[j], dp[j - coins.at(i)] 1);}}}if (dp[amount] INT_MAX) {return -1;}return dp[amount];}
};汇总