Pagini recente » Cod sursa (job #2790999) | Cod sursa (job #813902) | Cod sursa (job #2252835) | Cod sursa (job #2772435) | Cod sursa (job #674055)
Cod sursa(job #674055)
#include <cstdio>
#include <cstring>
#include <algorithm>
#define infile "zebughil.in"
#define outfile "zebughil.out"
#define n_max 17
using namespace std;
int N, G;
int a[n_max];
int dp[1<<n_max][n_max];
inline int bit(int mask, int k) { return mask & (1<<k); }
inline int add(int mask, int k) { return mask | (1<<k); }
void citeste()
{
scanf("%d %d", &N, &G);
for(int i=0;i<N;++i)
scanf("%d",&a[i]);
}
void rezolva()
{
memset(dp, -1, sizeof(dp));
dp[0][0] = G;
for(int i = 0; i < (1<<N); ++i)
for(int j = 0; j < N; ++j)
for(int k = 0; k < N; ++k)
if(!bit(i,k) && dp[i][j]!=-1)
if(dp[i][j] >= a[k])
dp[add(i,k)][j] = max(dp[add(i,k)][j], dp[i][j] - a[k]);
else
dp[add(i,k)][j+1] = max(dp[add(i,k)][j+1], G - a[k]);
}
void afiseaza()
{
for(int i=0;i<N;++i)
if(dp[(1<<N)-1][i] != -1)
{
printf("%d\n",i+1);
return;
}
printf ("1\n");
}
int main(void)
{
freopen(infile, "r", stdin);
freopen(outfile, "w", stdout);
for(int t=1;t<=3;++t)
{
citeste();
rezolva();
afiseaza();
}
fclose(stdin);
fclose(stdout);
return 0;
}