Cod sursa(job #3217851)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 24 martie 2024 21:42:00
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <bits/stdc++.h>

#pragma optimize GCC ("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

///#include <tryhardmode>
///#include <GODMODE::ON>

using namespace std;

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

const int MASK=20;

struct elem{
    int value;
    int weight;
}dp[1<<MASK];

int v[MASK];

void solve()
{
    int n,g,mask,i,j;
    fin>>n>>g;
    for(i=1;i<=n;i++)
        fin>>v[i];
    for(mask=1;mask<(1<<n);mask++)
    {
        dp[mask].value=n+1;
        dp[mask].weight=0;
        for(i=0;i<n;i++)
        {
            if(mask & (1<<i))
            {
                elem aux;
                aux=dp[mask^(1<<i)];
                if(aux.weight+v[i+1]<=g)
                    aux.weight+=v[i+1];
                else
                {
                    aux.value++;
                    aux.weight=v[i+1];
                }
                if(dp[mask].value>aux.value)
                    dp[mask]=aux;
                else
                {
                    if(dp[mask].value==aux.value && dp[mask].weight>aux.weight)
                        dp[mask]=aux;
                }
            }
        }
    }
    fout<<dp[(1<<n)-1].value+1<<"\n";
}

int main()
{
    ios_base::sync_with_stdio(false);
    fin.tie(NULL);
    fout.tie(NULL);

    int t;
    t=3;
    while(t--)
    {
        solve();
    }
    fin.close();
    fout.close();
    return 0;
}