CSES - Shared codeLink to this code:
https://cses.fi/paste/1f9f0a4bec1e79deb3e316/
#include <iostream>
#include <vector>
#define ll long long
#define MOD 1000000007
using namespace std;
ll check(int,vector<ll>&,vector<ll>&);
int main(){
ll n,x;
cin>>n>>x;
vector<ll> v(n,0);
for(auto &i:v){
cin>>i;
}
vector<ll> dp(x+1,-1);
check(x,dp,v);
if(dp[x]==0 || dp[x]==MOD) cout<<-1<<endl;
else cout<<(dp[x]+MOD)%MOD<<endl;
}
ll check(int n,vector<ll> &dp,vector<ll>&v){
if(n==0) return 0;
if(n<0) return MOD;
ll ans=MOD;
if(dp[n]!=-1) return dp[n];
for(int i=0;i<v.size();i++){
if(v[i]>n) continue;
ans=min(ans,1+check(n-v[i],dp,v));
}
return dp[n]=ans;
}