Pagini recente » Cod sursa (job #1901256) | Cod sursa (job #1438789) | Cod sursa (job #1405418) | Cod sursa (job #2085834) | Cod sursa (job #1541238)
#include <stdio.h>
#include <queue>
#define N_MAX 20002
#define G_MAX 75002
FILE *in, *out;
struct Element{
int val;
//std::queue<int> lista;
// std::queue<int> operator=(const Element & e){
// this->lista = e.lista;
// return this->lista;
// }
};
int n;
int g;
int gr[N_MAX];
Element v[G_MAX]; //v[i] = nr minim de obiecte pt a obt greutatea i
void citire();
int main()
{
citire();
int st, dr, auxDr, auxSt;
int i, j;
dr = g;
st = 1;
auxDr = gr[1];
auxSt = gr[1];
for (i = 1; i <= n; ++i){
for (j = dr; j >= st; --j){
if ((j + gr[i] <= g) && ((v[j].val != 0) && ((v[j + gr[i]].val > v[j].val + 1) || (v[j + gr[i]].val == 0)))){
v[j + gr[i]].val = v[j].val + 1;
//v[j + gr[i]] = v[j];
//v[j + gr[i]].lista.push(gr[i]);
if (j + gr[i] > auxDr)
auxDr = j + gr[i];
if (j + gr[i] < auxSt)
auxSt = j + gr[i];
}
}
v[gr[i]].val = 1;
//v[gr[i]].lista.push(gr[i]);
if (gr[i] > auxDr)
auxDr = gr[i];
if (gr[i] < auxSt)
auxSt = gr[i];
dr = auxDr;
st = auxSt;
}
i = g;
while (v[i].val == 0){
i--;
}
fprintf(out, "%d %d\n", i, v[i].val);
/*
while (!v[i].lista.empty()){
fprintf(out, "%d\n", v[i].lista.front());
v[i].lista.pop();
}
*/
/*
for (j = v[i].val; j > 0; --j){
fprintf(out, "%d\n", v[i].prev);
i = i - v[i].prev;
}
*/
fclose(in);
fclose(out);
return 0;
}
void citire(){
in = fopen("ghiozdan.in", "r");
out = fopen("ghiozdan.out", "w");
fscanf(in, "%d%d", &n, &g);
for (int i = 1; i <= n; ++i)
fscanf(in, "%d", &gr[i]);
}