#include <bits/stdc++.
h>
using namespace std;
void coinChangeWithCoins(vector<int>& coins, int amount) {
vector<int> dp(amount + 1, INT_MAX);
vector<int> parent(amount + 1, -1);
dp[0] = 0;
for (int i = 1; i <= amount; i++) {
for (int coin : coins) {
if (coin <= i && dp[i - coin] != INT_MAX) {
if (dp[i] > dp[i - coin] + 1) {
dp[i] = dp[i - coin] + 1;
parent[i] = coin; // store coin used
if (dp[amount] == INT_MAX) {
cout << "No solution possible\n";
return;
cout << "Minimum coins required: " << dp[amount] << endl;
cout << "Coins used: ";
int curr = amount;
while (curr > 0) {
cout << parent[curr] << " ";
curr -= parent[curr];
cout << endl;
int main() {
vector<int> coins = {1, 2, 5};
int amount = 11;
coinChangeWithCoins(coins, amount);
return 0;
Output:
Minimum coins required: 3
Coins used: 1 5 5