Cod sursa(job #3174459)

Utilizator gabriel.9619Gabriel Stefan Tita gabriel.9619 Data 24 noiembrie 2023 19:45:27
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");

struct punct{
    int nr, g;
}dp[140001];

int v[18];
int n, gmax, i, st, ant, bit;

int main()
{
    dp[0].nr=1;
    dp[0].g=0;
    for(int t=1;t<=3;t++)
    {
        fin>>n>>gmax;
        for(i=1;i<=n;i++)
        {
            fin>>v[i];
        }
        for(i=1;i<(1<<n);i++)
        {
            dp[i].nr=n+1;
            dp[i].g=0;
        }
        for(st=1;st<(1<<n);st++)
        {
            for(bit=0;bit<n;bit++)
            {
                if(((st>>bit)&1)==1)
                {
                    ant=st-(1<<bit);
                    if(dp[ant].nr!=n+1)
                    {
                        if(dp[ant].g+1ll*v[bit+1]<=gmax)
                        {
                            if(dp[st].nr>dp[ant].nr||dp[st].nr==dp[ant].nr&&dp[st].g>dp[ant].g+v[bit+1])
                            {
                                dp[st].nr=dp[ant].nr;
                                dp[st].g=dp[ant].g+v[bit+1];
                            }
                        }
                        else
                        {
                            if(dp[st].nr>dp[ant].nr+1||dp[st].nr==dp[ant].nr+1&&dp[st].g>v[bit+1])
                            {
                                dp[st].nr=dp[ant].nr+1;
                                dp[st].g=v[bit+1];
                            }
                        }
                    }
                }
            }
        }
        fout<<dp[(1<<n)-1].nr<<"\n";
    }
    return 0;
}