2016-06-12 8 views
0

私は自分でコインチェンジの問題をやろうとしていましたが、私のロジックがどこかに不足しているように思えます。助けてください。私の心には何かコメントがあります。最低コインのロジックが必要です

#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; 
} 
+1

標準的なソリューションを試しましたか? –

+0

標準溶液ですか? – Pikachu

+0

あなたはGoogleでしたか? –

答えて

1

ここで唯一の問題は、dp[]のすべての要素を-1に初期化するのを忘れたことです。

関連する問題