Pagini recente » Cod sursa (job #149102) | Cod sursa (job #670400) | Cod sursa (job #2207160) | Cod sursa (job #2320689) | Cod sursa (job #2988256)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int nmax = 17;
const int inf = 2e9 + 5;
ifstream f("zebughil.in");
ofstream g("zebughil.out");
pair<int, int> dp[(1<<nmax)];
void solve() {
int n, G; f >> n >> G;
vector<int> v(n);
for(int i=0; i<n; i++) f >> v[i];
for(int i=0; i<(1<<n); i++)
dp[i] = {inf, inf};
dp[0] = {1, 0};
// first - cnt camioane
// second - greutate minima in ultimul camion
for(int mask=0; mask<(1<<n); mask++) {
for(int i=0; i<n; i++) {
if((mask &(1<<i))) continue;
int new_mask = mask + (1<<i);
ll w = dp[mask].second + v[i];
pair<int, int> new_val;
if(w > G) new_val = {dp[mask].first+1, v[i]};
else new_val = {dp[mask].first, w};
dp[new_mask] = min(dp[new_mask], new_val);
}
}
g << dp[(1<<n)-1].first << "\n";
}
int main() {
for(int i=1; i<=3; i++) solve();
return 0;
}