Cod sursa(job #963772)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 19 iunie 2013 15:24:54
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<cstdio>
using namespace std;
int i,j,T,N,G,Z[20],DP[(1<<17)+5],Cap[(1<<17)+5],AuxD,AuxC;
int main()
{
    freopen("zebughil.in","r",stdin);
    freopen("zebughil.out","w",stdout);
    for(T=3;T;T--)
    {
        scanf("%d%d",&N,&G);
        for(i=1;i<=N;i++) scanf("%d",&Z[i]);
        for(i=1;i<(1<<N);i++) DP[i]=N+1,Cap[i]=0;
        for(i=1,j=1;i<(1<<N);i<<=1,j++) DP[i]=1,Cap[i]=Z[j];
        for(i=1;i<(1<<N);i++)
            for(j=1;j<=N;j++)
                if(!(1<<(j-1)&i))
                {
                    if(Z[j]+Cap[i]>G) AuxD=DP[i]+1,AuxC=Z[j];
                    else AuxD=DP[i],AuxC=Z[j]+Cap[i];
                    if(AuxD<DP[i+(1<<(j-1))]) DP[i+(1<<(j-1))]=AuxD,Cap[i+(1<<(j-1))]=AuxC;
                    else if(AuxD==DP[i+(1<<(j-1))]) if(AuxC<Cap[i+(1<<(j-1))]) DP[i+(1<<(j-1))]=AuxD,Cap[i+(1<<(j-1))]=AuxC;
                }
        printf("%d\n",DP[(1<<N)-1]);
    }
    return 0;
}