Cod sursa(job #2840495)

Utilizator NeganAlex Mihalcea Negan Data 27 ianuarie 2022 21:37:30
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
int dp[1 << 18][2];
int a[20];
int n, G;

void Solve()
{
    int i;
    dp[0][0] = G;
    dp[0][1] = 1;
    int N = (1 << n), stare;
    for(stare = 1; stare <= N; stare++)
        dp[stare][1] = 20;
    for(stare = 1;stare <= N;stare++)
        for(i = 0;i < n;i++)
            if((stare & (1 << i)))
            {
                int masca = (stare ^ (1 << i));
                if(dp[stare][1] > dp[masca][1])
                {
                    if(dp[masca][0] >= a[i])
                    {
                        dp[stare][1] = dp[masca][1];
                        dp[stare][0] = dp[masca][0] - a[i];
                    }
                }
                if(dp[stare][1] > dp[masca][1] + 1)
                    {
                        dp[stare][1] = dp[masca][1] + 1;
                        dp[stare][0] = G - a[i];
                    }
                else if(dp[stare][1] == dp[masca][1])
                    dp[stare][0] = max(dp[stare][0], dp[masca][0] - a[i]);
            }

    fout << dp[N - 1][1] << "\n";

}
void Citire()
{
    int t = 3, i;
    while(t--)
    {
        fin >> n >> G;
        for(i = 0;i < n;i++)
            fin >> a[i];
        Solve();
    }
}
int main()
{
    Citire();
    return 0;
}