Pagini recente » Cod sursa (job #1698668) | Cod sursa (job #1180251) | Cod sursa (job #1127535) | Cod sursa (job #2632504) | Cod sursa (job #1732835)
#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(mask=1;mask<(1<<n);mask++)
for(nrt=1;nrt<=n;nrt++)
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;mask=(1<<n)-1;
while(dp[mask][nrt]==-1)
nrt++;
printf("%d\n",nrt);
}
return 0;
}