Pagini recente » Cod sursa (job #2773210) | Cod sursa (job #2520674) | Cod sursa (job #2522267) | Cod sursa (job #773823) | Cod sursa (job #495490)
Cod sursa(job #495490)
/*
* File: main.cpp
* Author: petru
*
* Created on 2010-10-25
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
#define deb(n) fprintf(stderr,"%d ",(n));
#define debnl fprintf(stderr,"\n");
#define DN 18
#define LIM 1<<DN
#define MULT 0x3f3f3f3f
using namespace std;
int n,g,v[DN],dp[LIM][DN];
int main()
{
int i,j,nr,ok;
freopen("zebughil.in","r",stdin);
freopen("zebughil.out","w",stdout);
for(int ll=1; ll<=3; ++ll) {
scanf("%d %d",&n,&g);
for(i=1; i<=n; ++i) scanf("%d",&v[i]);
int lim=1<<n;
for(i=0; i<lim; ++i) for(j=0; j<=n; ++j) dp[i][j]=MULT;
//memset(dp,MULT,sizeof(dp));
dp[0][1]=0;
for(i=0; i<lim; ++i) for(j=0; j<=n; ++j) if(dp[i][j]!=MULT)
for(int t=0; t<n; ++t) {
nr=1<<t;ok=nr&i;
if(0==ok) {
ok=i|nr;
if(dp[i][j]+v[t+1]<=g) dp[ok][j]=min(dp[ok][j],dp[i][j]+v[t+1]);//mai incape
else dp[ok][j+1]=min(dp[ok][j+1],v[t+1]);//camion nou
}
}
int sol=n;
for(i=1; i<=n; ++i) if(MULT!=dp[lim-1][i]) {sol=i; break;}
printf("%d\n",sol);
}
return 0;
}