Pagini recente » Cod sursa (job #3195719) | Cod sursa (job #2159552) | Cod sursa (job #1337979) | Cod sursa (job #31747) | Cod sursa (job #2340582)
#include <cstdio>
#include <map>
#include <cstring>
using namespace std;
const int doila17 = 1<<17;
struct Dinamica
{
int ans,luat;
} dp[doila17+5];
int cost[20];
map<int,int> mp;
int main()
{ freopen("zebughil.in", "r",stdin);
freopen("zebughil.out", "w",stdout);
int n,g,i,put2,k,doilan,ii,nr,nrr;
put2=1;
for(i=0; i<=17; i++){
mp[put2]=i;
put2*=2;
}
for(k=1; k<=3; k++){
memset(dp, 20, sizeof(dp));
dp[0].ans=0;
scanf("%d%d", &n, &g);
dp[0].luat=g;
for(i=0; i<n; i++)
scanf("%d", &cost[i]);
doilan=1<<n;
for(i=1; i<doilan; i++){
ii=i;
while(ii){
nr=ii&(ii-1);
nr=ii-nr;
nrr=mp[nr];
if((long long)cost[nrr]+dp[i-nr].luat<=g){
if(dp[i].ans>dp[i-nr].ans){
dp[i].ans=dp[i-nr].ans;
dp[i].luat=cost[nrr]+dp[i-nr].luat;
}
}
else{
if(dp[i].ans>dp[i-nr].ans+1){
dp[i].ans=dp[i-nr].ans+1;
dp[i].luat=cost[nrr];
}
}
ii&=(ii-1);
}
}
printf("%d\n", dp[doilan-1].ans);
}
return 0;
}