#include<iostream>#include<vector>#include<algorithm>#include<limits>usingnamespacestd;intcoinChangeDP(inttarget,vector<int>&coins){vector<int>dp(target+1,target+1);dp[0]=0;for(inti=0;i<=target;++i){for(intcoin:coins){if(coin<=i){dp[i]=min(dp[i],dp[i-coin]+1);}}}returndp[target]<=target?dp[target]:-1;}intmain(){vector<int>coins={1,4,5};inttarget=8;intminCoins=coinChangeDP(target,coins);cout<<"Minimum number of coins: "<<minCoins<<endl;return0;}
#include<iostream>#include<vector>usingnamespacestd;intcoinChangeCombinations(inttarget,vector<int>&coins){vector<int>dp(target+1,0);dp[0]=1;for(intcoin:coins){for(inti=coin;i<=target;++i){dp[i]+=dp[i-coin];}}returndp[target];}intmain(){vector<int>coins={1,2,5};inttarget=5;intcombinations=coinChangeCombinations(target,coins);cout<<"Total number of combinations: "<<combinations<<endl;return0;}
#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;voidbacktrack(vector<int>&coins,inttarget,intstart,vector<int>¤t,vector<vector<int>>&result){if(target==0){result.push_back(current);return;}for(inti=start;i<coins.size();++i){if(target-coins[i]>=0){current.push_back(coins[i]);backtrack(coins,target-coins[i],i,current,result);current.pop_back();}}}vector<vector<int>>coinChangeCombinationsBacktrack(inttarget,vector<int>&coins){sort(coins.begin(),coins.end());vector<vector<int>>result;vector<int>current;backtrack(coins,target,0,current,result);returnresult;}intmain(){vector<int>coins={1,2,5};inttarget=5;vector<vector<int>>combinations=coinChangeCombinationsBacktrack(target,coins);cout<<"Total number of combinations: "<<combinations.size()<<endl;for(constauto&combination:combinations){for(intcoin:combination){cout<<coin<<" ";}cout<<endl;}return0;}