Pagini recente » Cod sursa (job #2533184) | Cod sursa (job #1953529) | Cod sursa (job #435867) | Cod sursa (job #2649226) | Cod sursa (job #2686092)
#include<bits/stdc++.h>
#define INF 2000000001
using namespace std;
ifstream fin ("zebughil.in");
ofstream fout("zebughil.out");
long long n,G,v[20],p[20];
struct el
{
long long camion,gr;
}dp[132000];
int main ()
{
long long t=3,i,j;
p[0]=1;
for (i=1;i<=17;i++)
p[i]=p[i-1]*2;
while (t--)
{
fin>>n>>G;
for (i=1;i<=n;i++)
fin>>v[i];
for (i=1;i<=p[n]-1;++i)
{
dp[i].camion=INF;
dp[i].gr=INF;
}
dp[0].camion=1;
for (i=0;i<=p[n]-1;++i) ///i=stare
for (j=0;j<n;j++) ///j=bit de pus
if ((i&p[j])==0)
{
if (dp[i].gr+v[j]>G)
{
if ((dp[i|p[j]].camion>dp[i].camion+1)||
(dp[i|p[j]].camion==dp[i].camion+1 && dp[i|p[j]].gr>v[j]))
{
dp[i|p[j]].camion=dp[i].camion+1;
dp[i|p[j]].gr=v[j];
}
}
else if ((dp[i|p[j]].camion>dp[i].camion)||
(dp[i|p[j]].camion==dp[i].camion && dp[i|p[j]].gr>dp[i].gr+v[j]))
{
dp[i|p[j]].camion=dp[i].camion;
dp[i|p[j]].gr=dp[i].gr+v[j];
}
}
fout<<dp[p[n]-1].camion<<'\n';
}
}