#include <cmath>
#include <iostream>
#include <limits>
#include <queue>
#include <vector>
using namespace std;
class Solution {
public:
int CoinChange(vector<int> &coins, int amount) {
const int n = coins.size();
vector<int> dp(amount + 1, amount + 1);
dp[0] = 0;
for (int i = 1; i <= amount; ++i) {
for (int j = 0; j < n; ++j) {
cout << "dp[" << i << "]: " << dp[i] << ", coins[" << j
<< "]: " << coins[j] << endl;
if (coins[j] <= i) {
dp[i] = min(dp[i], dp[i - coins[j]] + 1);
cout << "update, dp[" << i << "]: " << dp[i] << endl;
}
}
}
return dp[amount] > amount ? -1 : dp[amount];
}
};
int main() {
vector<int> coins = {1, 2, 5};
Solution solution;
int result= solution.CoinChange(coins, 11);
std::cout << "result: " << result << std::endl;
return 0;
}