Pagini recente » Cod sursa (job #132056) | Cod sursa (job #302591) | Cod sursa (job #73564) | Cod sursa (job #62064) | Cod sursa (job #2121640)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("zebughil.in");
ofstream cout ("zebughil.out");
const int INF = 1e9;
void Init (int cur, int n, int cur_mask, int cur_sum, int g,
vector < int > &weight, vector < int > &dp) {
if (cur > n) {
dp[cur_mask] = 1;
return;
}
if (1ll * cur_sum + weight[cur] <= 1ll * g) {
Init (cur + 1, n, (cur_mask ^ (1 << (cur - 1))), cur_sum + weight[cur], g, weight, dp);
}
Init (cur + 1, n, cur_mask, cur_sum, g, weight, dp);
}
int main () {
int n, g, t = 3;
vector < int > weight (18);
vector < int > dp (1 << 17);
while (t --) {
fill (dp.begin (), dp.end (), INF);
cin >> n >> g;
for (int i = 1; i <= n; ++ i) {
cin >> weight[i];
}
Init (1, n, 0, 0, g, weight, dp);
dp[0] = 0;
for (int mask = 1; mask < (1 << n); ++ mask) {
if (dp[mask] != INF) {
continue;
}
int aux = mask, comp = -1;
while (aux > comp) {
aux = ((aux - 1) & mask);
comp = (aux ^ mask);
dp[mask] = min (dp[mask], dp[aux] + dp[comp]);
}
}
cout << dp[(1 << n) - 1] << '\n';
}
}