algorithm - 我需要的最低硬币逻辑

标签 algorithm dynamic-programming

我正在尝试自己解决 Coin Change 问题。但似乎我的逻辑缺乏某些地方,请帮助我。我已经评论了我的想法。

#include <bits/stdc++.h>
using namespace std;
vector<int>nom;

int dp[1000004];

int recurse(int v){

  if(dp[v]!=-1)return dp[v];      // If already found something just return
  if(v==0)return 0;        // If value is 0.Minimum changes req is 0.
  if(v<0)return INT_MAX;  // If reached out of bound return MAX.
  int ans=INT_MAX;          // For storing Ans.

  for(int i=0;i<nom.size();i++){
  ans=min(ans,recurse(v-nom[i])+1); //Min  Number of changes req fir val-nom[i]+1 for value val.
  }
dp[v]=ans;
return dp[v];
}

int main() {
  int v,n,x;
  cin>>v>>n;        // Value for which I have to find change,No. of change available

  for(int i=0;i<n;i++){
  cin>>x;
  nom.push_back(x);  // changes
  dp[x]=1;       // If we want x money only 1 change req so dp[x]=1
  }

  int mincoins=0;     // For storing answer
  mincoins=recurse(v); // Answer for value v.
  cout<<mincoins<<endl;
  }
  return 0;
}

最佳答案

这里唯一的问题是您忘记将 dp[] 的所有元素初始化为 -1。

关于algorithm - 我需要的最低硬币逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37777081/

相关文章:

java - 使用动态规划的最长之字形子序列

algorithm - 防止从不同的客户端应用程序调用 web 服务

algorithm - 最大流量和一些条件

algorithm - 最小长度 L 的最大连续子序列和

arrays - 经过 k 次或更少次操作后具有相等奇偶性的最长子数组

algorithm - 0/1 Knapsack - 对 Wiki 伪代码的一些说明

python - 如何在不使用 * 运算符(或/运算符)的情况下递归地将两个正整数相乘? .您可以使用加法、减法和位移

c++ - 有效地复制/乘法树

algorithm - CodeForces 中的运行时错误

algorithm - 使用递归对队列进行排序