Cod sursa(job #1732830)

Utilizator LucianTLucian Trepteanu LucianT Data 22 iulie 2016 17:19:36
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[(1<<17)+5][maxN];
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[mask][nrt]=-1;
        for(nrt=1;nrt<=n;nrt++)
            for(mask=1;mask<(1<<n);mask++)
                for(i=0;i<n;i++)
                {
                    if(!(mask&(1<<i))) continue;
                        if(dp[mask-(1<<i)][nrt-1]!=-1)
                            dp[mask][nrt]=max(g-v[i],dp[mask][nrt]);
                        else if(dp[mask-(1<<i)][nrt]>=v[i])
                            dp[mask][nrt]=max(dp[mask][nrt],dp[mask-(1<<i)][nrt]-v[i]);
                }
        nrt=1;
        while(dp[(1<<n)-1][nrt]==-1)
            nrt++;
        printf("%d\n",nrt);
    }
    return 0;
}