CSES - Shared codeLink to this code:
https://cses.fi/paste/aa3e0eea8449aeef4bc1b8/
#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
typedef vector<long long> vl;
typedef pair<int, int> pii;
#define endl "\n"
#define debug(val) printf("check%d\n", val)
#define all(v) v.begin(), v.end()
#define pb push_back
#define mp make_pair
#define FF first
#define SS second
#define ll long long
#define ull unsigned long long
#define FOR(i, j, k, in) for (int i = j; i < k; i += in)
#define forr(k) for (int i = 0; i < k; i += 1)
#define For(j, k) for (int i = j; i < k; i += 1)
#define MOD 1000000007
#define clr(val) memset(val, 0, sizeof(val))
#define what_is(x) cerr << #x << " is " << x << endl;
#define OJ \
freopen("input.txt", "r", stdin); \
freopen("output.txt", "w", stdout);
#define FIO \
ios_base::sync_with_stdio(false); \
cin.tie(NULL); \
cout.tie(NULL);
ll miniCoins(ll idx, ll sum, vl &v, vector<vector<ll>> &dp)
{
if (idx == 0)
{
return sum % v[0] == 0 ? sum / v[0] : 1e8;
}
if (dp[idx][sum] != -1)
{
return dp[idx][sum];
}
ll pk = 1e8;
if (sum - v[idx] >= 0)
{
// cout << "yes " << v[idx] << " is less " << sum << "\n";
pk = 1 + miniCoins(idx, sum - v[idx], v, dp);
}
ll np = 0 + miniCoins(idx - 1, sum, v, dp);
return dp[idx][sum] = min(pk, np);
}
int main()
{
FIO;
// OJ;
ll n, s;
cin >> n >> s;
vl coins(n);
vector<vector<ll>> dp(n, vector<ll>(s + 1, -1));
forr(n)
{
cin >> coins[i];
}
ll ans = miniCoins(n - 1, s, coins, dp);
ans == 1e8 ? cout << -1 << "\n" : cout << ans << "\n";
}