Cod sursa(job #1317759)

Utilizator nicolaegutaNicolae Guta nicolaeguta Data 15 ianuarie 2015 09:43:06
Problema Zebughil Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>
#include <algorithm>
#define INF 2000000000

using namespace std;

int n,G,dp[1000000],s[1000000],g[100],lg[1000000];

inline int memo(int stare)
{
    if(dp[stare]!=-1) return dp[stare];
    int x;
    dp[stare]=INF;
    for(x=stare;x>0;x=((x-1)&stare))
        if(s[x]<=G)
            dp[stare]=min(dp[stare],1+memo(stare-x));
    return dp[stare];
}

inline void Prec()
{
    int i,j;
    for(i=1,j=0;i<=1000000;i<<=1,++j) lg[i]=j;
}

int main()
{
    int T,i,j;
    freopen ("zebughil.in","r",stdin);
    freopen ("zebughil.out","w",stdout);
    Prec();
    for(T=1;T<=3;++T)
    {
        scanf("%d%d", &n,&G);
        for(i=1;i<=n;++i) scanf("%d", &g[i]);
        for(i=1;i<(1<<n);++i)
        {
            dp[i]=-1;
            j=lg[i-(i&(i-1))];
            s[i]=s[(i&(i-1))]+g[j];
        }
        printf("%d\n", memo((1<<n)-1));
    }
    return 0;
}