Cod sursa(job #3317066)

Utilizator Gabriel_DaescuDaescu Gabriel Florin Gabriel_Daescu Data 21 octombrie 2025 21:56:57
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
#include <vector>
#define NMAX 17
using namespace std;
ifstream  fin("zebughil.in");
ofstream fout("zebughil.out");
int N,G;
vector<int> w(NMAX);
vector<pair<int,int>> dp(1<<NMAX);
/// dp[masca].first=nr min de camioane pt masca
/// dp[masca].second= capacitatea inca disponibila a ultimului camion

void citire()
{
    fin>>N>>G;

    for(int i=0; i<N; i++)
    {
        fin>>w[i];
    }
}

int main()
{
    for(int q=1; q<=3; q++)
    {
        citire();

        for(int masca=0; masca<(1<<N); masca++)
        {
            dp[masca].first=N+1;
            dp[masca].second=0;
        }

        dp[0]={1,0};
        for(int masca=0; masca<(1<<N); masca++)
        {
            for(int i=0; i<N; i++)
            {
                if(!(masca&(1<<i))) /// nu am transportat blocul i
                {
                    if(dp[masca].second+w[i]<=G)
                    {
                        dp[masca|(1<<i)]=min(dp[masca|(1<<i)],{dp[masca].first,dp[masca].second+w[i]});
                    }
                    else
                    {
                        dp[masca|(1<<i)]=min(dp[masca|(1<<i)],{dp[masca].first+1,w[i]});
                    }
                }
            }
        }

        fout<< dp[(1<<N)-1].first << "\n";
    }

    return 0;
}