Cod sursa(job #1473550)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 19 august 2015 17:04:20
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include<bits/stdc++.h>
using namespace std;

ifstream fin("zebughil.in");
ofstream fout("zebughil.out");

const int NMAX=20;
const int LIMIT=(1<<17)+5;

int n,G,a[NMAX],dp[LIMIT][NMAX];

inline int zeros(int x)
{
    return x^(x&(x-1));
}

int main()
{
    int i,j,l,sol,aux,conf;
    for (l=1;l<=3;l++)
        {
            fin>>n>>G;
            for (i=0;i<n;i++) fin>>a[i];
            for (i=0;i<(1<<n);i++)
                for (j=1;j<=n;j++)
                    dp[i][j]=-1;
            for (i=0;i<n;i++) dp[1<<i][1]=G-a[i];
            for (conf=1;conf<(1<<n);conf++)
                if (conf!=zeros(conf))
                    for (j=0;j<n;j++)
                        if (conf&(1<<j))//pun pe j la sfarsit in permutare
                            {
                                aux=conf-(1<<j);
                                for (i=1;i<=n;i++)
                                    if (dp[aux][i]>=0)
                                        {
                                            if (dp[aux][i]<a[j]) dp[conf][i+1]=max(dp[conf][i+1],G-a[j]);
                                            else dp[conf][i]=max(dp[conf][i],dp[aux][i]-a[j]);
                                        }
                            }
            for (i=n;i>=1;i--)
                if (dp[(1<<n)-1][i]>=0)
                    sol=i;
            fout<<sol<<"\n";
        }
    return 0;
}