Pagini recente » Cod sursa (job #2805845) | Cod sursa (job #561292) | Cod sursa (job #126969) | Cod sursa (job #1507260) | Cod sursa (job #1732830)
#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;
}