Я попытался запомнить значение '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;
}
Без напоминания, это работает нормально.