Pagini recente » Cod sursa (job #1331039) | Cod sursa (job #617393) | Cod sursa (job #1577464) | Cod sursa (job #823209) | Cod sursa (job #3174459)
#include <fstream>
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
struct punct{
int nr, g;
}dp[140001];
int v[18];
int n, gmax, i, st, ant, bit;
int main()
{
dp[0].nr=1;
dp[0].g=0;
for(int t=1;t<=3;t++)
{
fin>>n>>gmax;
for(i=1;i<=n;i++)
{
fin>>v[i];
}
for(i=1;i<(1<<n);i++)
{
dp[i].nr=n+1;
dp[i].g=0;
}
for(st=1;st<(1<<n);st++)
{
for(bit=0;bit<n;bit++)
{
if(((st>>bit)&1)==1)
{
ant=st-(1<<bit);
if(dp[ant].nr!=n+1)
{
if(dp[ant].g+1ll*v[bit+1]<=gmax)
{
if(dp[st].nr>dp[ant].nr||dp[st].nr==dp[ant].nr&&dp[st].g>dp[ant].g+v[bit+1])
{
dp[st].nr=dp[ant].nr;
dp[st].g=dp[ant].g+v[bit+1];
}
}
else
{
if(dp[st].nr>dp[ant].nr+1||dp[st].nr==dp[ant].nr+1&&dp[st].g>v[bit+1])
{
dp[st].nr=dp[ant].nr+1;
dp[st].g=v[bit+1];
}
}
}
}
}
}
fout<<dp[(1<<n)-1].nr<<"\n";
}
return 0;
}