Cod sursa(job #2917271)

Utilizator toma_ariciuAriciu Toma toma_ariciu Data 4 august 2022 08:47:34
Problema Zebughil Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
/// Preset de infoarena
#include <fstream>

using namespace std;

ifstream fin("zebughil.in");
ofstream fout("zebughil.out");

int dp[(1 << 17) + 5][20];
int v[20], n, g;

void solve()
{
    fin >> n >> g;
    for(int i = 0; i < n; i++) /// :(((
        fin >> v[i];
    for(int config = 0; config < (1 << n); config++)
        for(int i = 1; i <= n; i++)
            dp[config][i] = -1;
    for(int i = 0; i < n; i++)
        dp[(1 << i)][1] = g - v[i];
    for(int config = 1; config < (1 << n); config++)
    {
        for(int i = 1; i <= n; i++)
        {
            if(dp[config][i] == -1)
                continue;
            for(int j = 0; j < n; j++)
            {
                if(config & (1 << j) != 0)
                    continue;
                int newconfig = config + (1 << j);
                if(v[j] <= dp[config][i])
                    dp[newconfig][i] = max(dp[newconfig][i], dp[config][i] - v[j]);
                else
                    dp[newconfig][i + 1] = max(dp[newconfig][i + 1], g - v[j]);
            }
        }
    }
    for(int i = 1; i <= n; i++)
    {
        if(dp[(1 << n) - 1][i] != -1)
        {
            fout << i << '\n';
            return;
        }
    }
}

int main()
{
    for(int t = 1; t <= 3; t++)
        solve();
    return 0;
}