Cod sursa(job #1732832)

Utilizator LucianTLucian Trepteanu LucianT Data 22 iulie 2016 17:25:57
Problema Zebughil Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>
#define maxN 18
using namespace std;
int n,i,g,T=3,k,mask,nrt,v[maxN];
int dp[maxN][(1<<17)+5];
int main()
{
    freopen("zebughil.in","r",stdin);
    freopen("zebughil.out","w",stdout);
    while(T--)
    {
        scanf("%d %d",&n,&g);
        for(i=0;i<n;i++)
            scanf("%d",&v[i]);
        for(mask=1;mask<(1<<n);mask++)
            for(nrt=0;nrt<=n;nrt++)
                dp[nrt][mask]=-1;
        for(nrt=1;nrt<=n;nrt++)
            for(mask=1;mask<(1<<n);mask++)
                for(i=0;i<n;i++)
                    if(mask&(1<<i))
                    {
                        if(dp[nrt-1][mask-(1<<i)]!=-1)
                            dp[nrt][mask]=max(g-v[i],dp[nrt][mask]);
                        else if(dp[nrt][mask-(1<<i)]>=v[i])
                            dp[nrt][mask]=max(dp[nrt][mask],dp[nrt][mask-(1<<i)]-v[i]);
                    }
        nrt=1;
        while(dp[nrt][(1<<n)-1]==-1)
            nrt++;
        printf("%d\n",nrt);
    }
    return 0;
}