Cod sursa(job #963680)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 17 iunie 2013 23:43:27
Problema Zebughil Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 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;
        for(i=1;i<(1<<N);i<<=1) DP[i]=1,Cap[i]=G-Z[i];
        for(i=1;i<(1<<N);i++)
            for(j=1;j<=N;j++)
                if(!(1<<(j-1)&i))
                {
                    if(Z[j]>Cap[i]) AuxD=DP[i]+1,AuxC=G-(Cap[i]+Z[j])%G;
                    else AuxD=DP[i],AuxC=Cap[i]-Z[j];
                    if(AuxC<DP[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;
}