Pagini recente » Cod sursa (job #316823) | Cod sursa (job #186108) | Cod sursa (job #1925097) | Cod sursa (job #536160) | Cod sursa (job #2211473)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("zebughil.in");
ofstream out ("zebughil.out");
#define ll long long
int const nmax = 17;
ll const inf = 200000000005;
int const maxmask = (1 << nmax);
ll v[5 + nmax];
ll dpc[5 + maxmask];
ll dpl[5 + maxmask];
void solve(){
int n ;
ll gmax;
in >> n >> gmax;
for(int i = 0 ; i < n ;i++)
in >> v[i];
for(int mask = 0 ; mask < (1 << n) ;mask++){
dpc[mask] = dpl[mask] = inf;
}
dpc[0] = 1;
dpl[0] = 0;
for(int mask = 0 ; mask < (1 << n) ;mask++){
for(int j = 0 ; j < n ;j++){
if(0 == ((1 << j) & mask) ){
int mask2 = mask | (1 << j);
ll newdpc = dpc[mask];
ll newdpl = dpl[mask];
if(newdpl + v[j] <= gmax)
newdpl += v[j];
else{
newdpc++;
newdpl = v[j];
}
if(newdpc < dpc[mask2] || (newdpc == dpc[mask2] && newdpl < dpl[mask2])){
dpc[mask2] = newdpc;
dpl[mask2] = newdpl;
}
}
}
}
out << dpc[(1 << n) - 1] << '\n';
}
int main()
{
for(int testcase = 1 ;testcase <= 3 ;testcase++){
solve();
}
return 0;
}