Pagini recente » Cod sursa (job #74213) | Cod sursa (job #629861) | Cod sursa (job #2178613) | Cod sursa (job #1548283) | Cod sursa (job #2657491)
#include <bits/stdc++.h>
using namespace std;
const int INF = 2000000000;
const int NMAX = 132005;
struct elem {
long long c, gr;
};
long long v[20];
elem dp[NMAX];
int main () {
freopen ("zebughil.in", "r", stdin);
freopen ("zebughil.out", "w", stdout);
for (int l = 1; l <= 3; l++){
long long n, gmax, p = 1;
scanf ("%lld%lld", &n, &gmax);
for (int i = 1; i <= n; i++, p *= 2)
scanf ("%lld", &v[i]);
p--;
for (int i = 1; i <= p; i++)
dp[i].c = dp[i].gr = INF;
dp[0].c = 1;
for (int i = 0; i < p; i++)
for (int j = 1, k = 1; k <= n; j *= 2, k++)
if ((i & j) == 0){
if (dp[i].gr + v[k] > gmax){
if (dp[i | j].c > dp[i].c + 1 ||
(dp[i | j].c == dp[i].c + 1 && dp [i | j].gr > v[k])){
dp[i | j].c = dp[i].c + 1;
dp[i | j].gr = v[k];
}
}
else{
if (dp[i | j].c > dp[i].c ||
(dp[i | j].c == dp[i].c && dp[i | j].gr > dp[i].gr + v[k])){
dp[i | j].c = dp[i].c;
dp[i | j].gr = dp[i].gr + v[k];
}
}
}
printf ("%d\n", dp[p].c);
}
return 0;
}