Pagini recente » Cod sursa (job #393268) | Cod sursa (job #2789717) | Cod sursa (job #18990) | Cod sursa (job #698589) | Cod sursa (job #3224519)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 18;
int v[NMAX];
int n, g;
struct Masca{
int greutate, nr_camioane;
};
Masca dp[1<<NMAX];
Masca combine( Masca a, int b ){
if( a.greutate + v[b] <= g )
a.greutate += v[b];
else{
a.nr_camioane++;
a.greutate = min(a.greutate, v[b]);
}
return a;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
freopen("zebughil.in", "r", stdin);
freopen("zebughil.out", "w", stdout);
int t = 3;
while( t-- ){
cin >> n >> g;
for( int i = 0; i < n; i++ )
cin >> v[i];
for( int mask = 1; mask < (1 << n); mask++ ){
dp[mask].nr_camioane = n+1;
for( int i = 0; i < n; i++ ){
if( mask & ( 1 << i ) ){
int cpy = mask - ( 1 << i );
Masca x = combine(dp[cpy], i);
if( x.nr_camioane < dp[mask].nr_camioane || (x.nr_camioane == dp[mask].nr_camioane && x.greutate < dp[mask].greutate) )
dp[mask] = x;
}
}
}
cout << dp[(1 << n)-1].nr_camioane + 1 << endl;
}
return 0;
}