int f(int ind,int target,vector<int>& a,vector<vector<int>>& dp)
{
int pick,nonPick;
if(ind==0)
{
if(target%a[0]==0)return target/a[0];
else return INT_MAX;
}
if(dp[ind][target]!=-1)return dp[ind][target];
nonPick = f(ind-1,target,a,dp);
pick = 1e9;
if(a[ind]<=target)
pick = 1+f(ind,target-a[ind],a,dp);
return dp[ind][target]=min(pick,nonPick);
}
int coinChange(vector<int>& coins, int amount) {
int n = coins.size();
vector<vector<int>> dp(n,vector<int>(amount+1,-1));
int res =f(n-1,amount,coins,dp);
return (res>=1e9)?-1:res;
}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter