Cod sursa(job #2453634)

Utilizator armigheGheorghe Liviu Armand armighe Data 4 septembrie 2019 20:24:10
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("zebughil.in");
ofstream g("zebughil.out");
long long v[20];
struct elem
{
    long long c,gr;
};
elem dp[132002];
int main()
{
    long long n,gmax,i,j,l,p,k;
    for(l=1;l<=3;l++)
    {
        f>>n>>gmax;
        p=1;
        for(i=1;i<=n;i++)
            f>>v[i],p*=2;
        p--;
        for(i=1;i<=p;i++)
            dp[i].c=dp[i].gr=2000000000;
        dp[0].c=1;
        for(i=0;i<p;i++)
        for(j=1,k=1;k<=n;j*=2,k++)
        if((i&j)==0)
        {
            if(dp[i].gr+v[k]>gmax)
            {
                if(dp[i|j].c>dp[i].c+1||(dp[i|j].c==dp[i].c+1&&dp[i|j].gr>v[k]))
                    dp[i|j].c=dp[i].c+1,dp[i|j].gr=v[k];
            }
            else
            {
                if(dp[i|j].c>dp[i].c||(dp[i|j].c==dp[i].c&&dp[i|j].gr>dp[i].gr+v[k]))
                    dp[i|j].c=dp[i].c,dp[i|j].gr=dp[i].gr+v[k];
            }
        }
        g<<dp[p].c<<'\n';
    }
    return 0;
}