Pagini recente » Cod sursa (job #2094900) | Cod sursa (job #2565965) | Cod sursa (job #152101) | Cod sursa (job #2044571) | Cod sursa (job #2922632)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ifstream fin( "zebughil.in" );
ofstream fout( "zebughil.out" );
const int MAXN = 18;
const int INF = 1e9;
int v[MAXN];
int dp[1 << MAXN], res[1 << MAXN];
int main() {
int n, g;
for ( int _ = 0; _ < 3; ++_ ) {
fin >> n >> g;
for ( int i = 0; i < n; ++i ) {
fin >> v[i];
}
for ( int q = 1; q < (1 << n); ++q ) {
dp[q] = 0;
res[q] = INF;
}
res[0] = 1;
for ( int mask = 1; mask < (1 << n); ++mask ) {
for ( int i = 0; i < n; ++i ) {
if ( mask & (1 << i) ) {
if ( v[i] + dp[mask ^ (1 << i)] <= g ) {
if ( res[mask ^ (1 << i)] < res[mask] || (res[mask ^ (1 << i)] == res[mask] && dp[mask ^ (1 << i)] + v[i] < dp[mask]) ) {
dp[mask] = dp[mask ^ (1 << i)] + v[i];
res[mask] = res[mask ^ (1 << i)];
}
} else {
if ( res[mask ^ (1 << i)] + 1 < res[mask] || (res[mask ^ (1 << i)] + 1 == res[mask] && v[i] < dp[mask]) ) {
dp[mask] = v[i];
res[mask] = res[mask ^ (1 << i)] + 1;
}
}
}
}
}
fout << res[(1 << n) - 1] << "\n";
}
fin.close();
fout.close();
return 0;
}