Pagini recente » Cod sursa (job #209883) | Cod sursa (job #1012913) | Cod sursa (job #2195041) | Cod sursa (job #1910118) | Cod sursa (job #94362)
Cod sursa(job #94362)
#include <stdio.h>
#include <algorithm>
using namespace std;
#define GMAX 7502
#define NMAX 1002
#define INF 666000666
int N, G, A[NMAX][GMAX], V[NMAX], Nmax, Gmax, Vn[NMAX][GMAX][2];
int main()
{
int i, g, j, k;
freopen("ghiozdan.in", "r", stdin);
scanf("%d%d", &N, &G);
for (i = 0; i < N; i++) scanf("%d", V+i);
sort(V,V+N);
for (i = 0; i < N; i++)
for (g = 1; g <= G; g++) A[i][g] = INF;
i = 0;
A[i][V[i]]=1; Gmax = V[i]; Nmax = 1;
for (i = 1; i < N; i++)
{
for (g = 0; g <= G; g++) A[i][g] = A[i-1][g], Vn[i][g][0] = i-1, Vn[i][g][1] = Vn[i-1][g][1];
for (g = V[i]; g <= G; g++)
if (A[i][g]>(A[i-1][g-V[i]]+1)) A[i][g] = A[i-1][g-V[i]]+1, Vn[i][g][0] = i-1, Vn[i][g][1] = V[i];
for (g = G; g > 0; g--)
if (A[i][g]<INF) break;
if ((Gmax<g)||((Gmax==g)&&(Nmax>A[i][g])))
Gmax = g, Nmax = A[i][g], k = i;
}
freopen("ghiozdan.out", "w", stdout);
printf("%d %d\n", Gmax, Nmax);
g = Gmax;
printf("%d\n", V[k]);
while (Nmax)
{
j = g-Vn[k][g][1];
k = Vn[k][g][0]; g = j;
printf("%d\n", V[k]);
Nmax--;
}
return 0;
}