問題の意味
様々な宗派のコインの適切な数、Couchuを指定された少なくともコインお金を使用する方法
思考
動的計画問題解決を使用してこの問題。現在の状態は唯一の通貨の種類に関連し、それは線形ダイナミックプログラミングであります
ステータス定義:
DP [I]:コインDP [i]のために必要なI Couchuドル最小数
状態遷移式:
DP [I] =分(DP [I - J]、Jの値がコインIS)
初期状態:
DP [0] = 0
コード
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
if(amount == 0)
{
return 0;
}
vector<int> dp(amount+1, INT_MAX);
dp[0] = 0;
for(int i = 1; i <= amount; i++)
{
for(auto value : coins)
{
if(i - value >= 0)
{
dp[i] = min(dp[i], dp[i-value]);
}
}
if(dp[i] != INT_MAX)
dp[i] += 1;
}
if(dp[amount] == INT_MAX)
return -1;
return dp[amount];
}
};
// dp[i] : 凑齐i块钱,所需的硬币最小数量为dp[i]
// dp[i] = min(dp[i-j], j is the value of coins) + 1
// dp[0] = 0