我试图记住'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;
}
没有备忘录,就可以正常工作。
答案 0 :(得分:1)
您的函数有2种状态,您只为一种状态存储值。假设您想要f(2,2,v)的值。您的dp [2]数组可以包含f(2,x,v)中的任何值,其中x可以是“ cnt”的任何值。