Cod sursa(job #18731)

Utilizator fireatmyselfBogdan-Alexandru Stoica fireatmyself Data 18 februarie 2007 13:02:01
Problema Ghiozdan Scor 28
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#include <string.h>
#define CMAX 202
#define GMAX 75555
#define NMAX 20200
#define INF 666000666

int N, G, V[NMAX];
int DP[GMAX], Ales[GMAX];

int main()
{
        int i, j, s, d;

        freopen("ghiozdan.in", "r", stdin);
        scanf("%d %d", &N, &G);

        for (i = 0; i < N; i++)
            scanf("%d", &V[i]);

        for (i = 1; i < NMAX; i++) DP[i] = INF;

        for (i = 0; i < N; i++)
                for (j = G; j >= V[i]; j--)
                    if (DP[j-V[i]]+1 < DP[j])
                       DP[j] = DP[j-V[i]]+1, Ales[j] = V[i];

        freopen("ghiozdan.out", "w", stdout);
        i = G;
        while (DP[i] == INF) i--;
        printf("%d %d\n", i, DP[i]);
        while (Ales[i] != 0)
        {
                printf("%d\n", Ales[i]);
                i = i-Ales[i];
        }

        return 0;
        
}