题目:
题解:
int coinChange(int* coins, int coinsSize, int amount) {
int dp[coinsSize+1][amount+1];
for(int i=0;i<=coinsSize;i++){
for(int j=0;j<=amount;j++){
dp[i][j]=INT_MAX-1;//初始化值为INT_MAX-1,避免后续加一导致溢出
}
}
for(int i=0;i<=coinsSize;i++){
dp[i][0]=0;
}
for(int i=1;i<=coinsSize;i++){
for(int j=0;j<=amount;j++){
if(j>=coins[i-1]&&dp[i][j-coins[i-1]]!=(INT_MAX-1)){
dp[i][j]=fmin(dp[i-1][j],dp[i][j-coins[i-1]]+1);
}
else{
dp[i][j]=dp[i-1][j];
}
}
}
if(dp[coinsSize][amount]==(INT_MAX-1))return -1;
return dp[coinsSize][amount];
}