279.完全平方数
https://leetcode-cn.com/problems/perfect-squares/
定义dp[i]:
给定正整数i,完全平方数的最小数量
转移方程:
1.不装入:dp[i]
2.装入:dp[i - j * j] + 1
- 背包每次减少的容量wt:
j*j 背包每次增加的价值v:
1var numSquares = function(n) {if (n === 0) {return 0;}let dp = new Array(n + 1);dp[0] = 0;for (let i = 1; i <= n; i++) {dp[i] = i;for (let j = 1; j * j <= i; j++) {dp[i] = Math.min(dp[i], dp[i - j * j] + 1);}}return dp[n];};
322.零钱兑换
https://leetcode-cn.com/problems/coin-change/

定义dp[i]:
面值为i的硬币,凑成总额的最小硬币数量
转移方程:
1.不装入:dp[i]
2.装入:dp[i - c] + 1背包每次减少容量:c
- 背包每次增加价值:1
/** * @param {number[]} coins * @param {number} amount * @return {number} */ var coinChange = function (coins, amount) { let dp = new Array(amount + 1); dp[0] = 0; for (let i = 1; i <= amount; i++) { dp[i] = Infinity; for (let c of coins) { // 小心溢出 if (i >= c && dp[i - c] !== Infinity) { dp[i] = Math.min(dp[i], dp[i - c] + 1); } } } if (dp[amount] === Infinity) { return -1; } return dp[amount]; };494.目标和

