题目:

题解:
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];
}
                


















