Pagini recente » Cod sursa (job #1712404) | Cod sursa (job #1353494) | Cod sursa (job #356167) | Cod sursa (job #457794) | Cod sursa (job #3173258)
#include <fstream>
using namespace std;
ifstream cin("zebughil.in");
ofstream cout("zebughil.out");
int n,i,j,p;
long long g,v[20],dp[(1<<18)][3];
void rezolvare(){
cin>>n>>g;
for(i=0;i<n;i++)
cin>>v[i];
for(i=1;i<(1<<n);i++){
dp[i][1]=n+1;// dp[i][1] = nr drumuri folosind i pachete
dp[i][2]=0;// dp[i][2] = greutatea a i pachete
}
dp[0][1]=1;
dp[0][2]=0;
for(i=1;i<(1<<n);i++)
for(p=0;p<n;p++)
if(i&(1<<p)){
int j=i-(1<<p);
if(dp[j][2]+v[p]<=g){
if(dp[j][1]<dp[i][1]||(dp[j][1]==dp[i][1]&&dp[j][2]+v[p]<dp[i][2])){
dp[i][1]=dp[j][1];
dp[i][2]=dp[j][2]+v[p];
}
}else if(dp[j][1]+1<dp[i][1]||(dp[j][1]+1==dp[i][1]&&v[p]<dp[i][2])){
dp[i][1]=dp[j][1]+1;
dp[i][2]=v[p];
}
}
cout<<dp[(1<<n)-1][1]<<'\n';
}
int main()
{
for(int w=1;w<=3;w++)
rezolvare();
return 0;
}