零钱兑换
注意几个关键的地方:
- 因为每次都是找min,所以我们不能将所有元素都初始化为0,不然最后结果一定是0,这里我设置为0x3f3f3f3f,表示无解。
- 当
amount==0
的时候,此时的最小硬币个数应该是0,所以dp[0]=0
,是有解的,不能设置为dp[0]=0x3f3f3f3f
AC:
int coinChange(vector<int>& coins, int amount)
{
const int N=0x3f3f3f3f;
vector<int>dp(amount+1,N); //dp表示凑成amount的最少硬币个数
dp[0]=0;
for(int i=0;i<coins.size();i++)
for(int j=coins[i];j<=amount;j++)
dp[j]=min(dp[j],dp[j-coins[i]]+1);
if(dp[amount]==N) return -1;
return dp[amount];
}