如何记下这种重复现象以减少硬币问题?

时间:2019-06-19 12:24:49

标签: recursion dynamic-programming memoization

我试图记住'x'的值,但是给出了错误的答案。

取消注释部分的注释将给出错误的答案。

//vi dp(1000001,-1);

int f(int x,int cnt,const vi &v){
    if(x<0)return INT_MAX;
    if(x==0)return cnt;
    //if(dp[x]!=-1)return dp[x];
    int ans=INT_MAX;
    for(const int &i:v){
        ans=min(ans,f(x-i,cnt+1,v));
    }
    //dp[x]=ans;
    return ans;
}

没有备忘录,就可以正常工作。

1 个答案:

答案 0 :(得分:1)

您的函数有2种状态,您只为一种状态存储值。假设您想要f(2,2,v)的值。您的dp [2]数组可以包含f(2,x,v)中的任何值,其中x可以是“ cnt”的任何值。