Cod sursa(job #2686096)

Utilizator stefanvoicaVoica Stefan stefanvoica Data 18 decembrie 2020 15:18:06
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<bits/stdc++.h>
#define INF 2000000001
using namespace std;
ifstream fin ("zebughil.in");
ofstream fout("zebughil.out");
long long n,G,v[20],p[20];

struct el
{
    long long camion,gr;
}dp[132000];


int main ()
{
    long long t=3,i,j;
    p[0]=1;
    for (i=1;i<=17;i++)
        p[i]=p[i-1]*2;
    while (t--)
    {
        fin>>n>>G;
        for (i=1;i<=n;i++)
            fin>>v[i];
         for (i=1;i<=p[n]-1;++i)
         {
             dp[i].camion=INF;
             dp[i].gr=INF;
         }
        dp[0].camion=1;
        for (i=0;i<=p[n]-1;++i)  ///i=stare
            for (j=1;j<=n;j++)   ///j=bit de pus
                if ((i&p[j-1])==0)
        {
            if (dp[i].gr+v[j]>G)
            {
                if ((dp[i|p[j-1]].camion>dp[i].camion+1)||
                    (dp[i|p[j-1]].camion==dp[i].camion+1 && dp[i|p[j-1]].gr>v[j]))
                {
                    dp[i|p[j-1]].camion=dp[i].camion+1;
                    dp[i|p[j-1]].gr=v[j];
                }
            }
            else    if ((dp[i|p[j-1]].camion>dp[i].camion)||
                    (dp[i|p[j-1]].camion==dp[i].camion && dp[i|p[j-1]].gr>dp[i].gr+v[j]))
                   {
                    dp[i|p[j-1]].camion=dp[i].camion;
                    dp[i|p[j-1]].gr=dp[i].gr+v[j];
                    }
        }
        fout<<dp[p[n]-1].camion<<'\n';
    }
}