Pagini recente » Cod sursa (job #2108208) | Cod sursa (job #1571402) | Cod sursa (job #3335476) | Cod sursa (job #2177445) | Cod sursa (job #3334095)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
const int NMAX=17,MASKMAX=(1<<NMAX);
int n,i,v[NMAX+5],maskmax,mask,is_bit,cnt_bits,dp[MASKMAX+5],g[NMAX+5];
long long G;
void read()
{
fin>>n>>G;
for (i=0; i<n; i++)
fin>>v[i];
}
void init()
{
maskmax=(1<<n);
for (mask=0; mask<maskmax; mask++)
dp[mask]=1000;
dp[0]=0;
}
void bkt(int step ,int newmask, int sum)
{
for (int i=0; i<=1; i++)
{
if (i==0)
{
if (step<cnt_bits)
bkt(step+1,newmask,sum);
else
dp[mask]=min(dp[mask],1+dp[mask^newmask]);
}
else
{
int actual_bit=g[step],new_newmask=newmask+(1<<actual_bit);
long long aux1=sum+v[actual_bit];
if (aux1<=G)
{
if (step<cnt_bits)
bkt(step+1,new_newmask,aux1);
else
dp[mask]=min(dp[mask],1+dp[mask^new_newmask]);
}
}
}
}
void solve()
{
for (mask=1; mask<maskmax; mask++)
{
cnt_bits=0;
for (i=0; i<n; i++)
{
is_bit=(1<<i);
if (is_bit>mask)
break;
is_bit&=mask;
if (is_bit)
{
cnt_bits++;
g[cnt_bits]=i;
}
}
bkt(1,0,0);
}
fout<<dp[maskmax-1]<<'\n';
}
int main()
{
ios_base::sync_with_stdio(false);
read();
init();
solve();
read();
init();
solve();
read();
init();
solve();
return 0;
}