2016-06-12 2 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.