Pagini recente » Cod sursa (job #124985) | Cod sursa (job #1288347) | Cod sursa (job #877670) | Cod sursa (job #2540066) | Cod sursa (job #1804741)
#include <cstdio>
#include <algorithm>
const int MAX_N = 20000;
const int MAX_G = 75000;
const int INFINIT = 1000000000;
int v[MAX_N];
int d[MAX_G];
int ruksak[MAX_N];
bool cmp(int a, int b) {
return a > b;
}
int min(int a, int b) {
if(a < b)
return a;
return b;
}
int din(int i, int n, int g) {
int rez;
printf("%d %d %d\n", i, n, g);
if(g < 0)
return INFINIT;
if(i >= n && g != 0)
return INFINIT;
if(d[g] >= INFINIT) {
while(i < n && din(i + 1, n, g - v[i]) >= INFINIT)
++i;
d[g] = din(i + 1, n, g - v[i]) + 1;
}
printf("!%d\n", d[g]);
return d[g];
}
int main() {
int n, g;
FILE *fin = fopen("ghiozdan.in", "r");
fscanf(fin, "%d%d", &n, &g);
for(int i = 0; i < n; ++i)
fscanf(fin, "%d", &v[i]);
fclose(fin);
std::sort(v, v + n, cmp);
for(int i = 1; i <= g; ++i)
d[i] = INFINIT;
d[0] = 0;
FILE *fout = fopen("ghiozdan.out", "w");
while(din(0, n, g) >= INFINIT)
g--;
fprintf(fout, "%d %d\n", g, din(0, n, g));
fclose(fout);
return 0;
}