DP
1 | class Solution { |
DP
1 | class Solution { |
设第 i 个硬币的价值为 wi,设我们最多可以使用 k 次该硬币:
- 当不使用第 i 个硬币时,dp[i][j] = dp[i - 1][j]
- 当使用 1 次第 i 个硬币时,dp[i][j] = dp[i - 1][j - wi]
- 当使用 2 次第 i 个硬币时,dp[i][j] = dp[i - 1][j - 2 * wi]
- 当使用 k 次第 i 个硬币时,dp[i][j] = dp[i - 1][j - k * wi]
易知:dp[i][j] = sum(dp[i - 1][j], dp[i - 1][j - wi], dp[i - 1][j - 2 * wi], … dp[i - 1][j - k * wi]) ①
令 j = j - wi,因为少了一个 wi,所以能够使用的最大硬币数为 k - 1:
易知:dp[i][j - wi] = sum(dp[i - 1][j - wi], dp[i - 1][j - 2 * wi], dp[i - 1][j - 3 * wi], … dp[i - 1][j - wi - (k - 1) * wi])
化简:dp[i][j - wi] = sum(dp[i - 1][j - wi], dp[i - 1][j - 2 * wi], dp[i - 1][j - 3 * wi], … dp[i - 1][j - k * wi]) ②
将 ② 式替换 ① 式中的部分项后得到化简后的 ① 式:
dp[i][j] = sum(dp[i - 1][j], dp[i][j - wi])
DP
1 | class Solution { |
DP
1 | class Solution { |