Cod sursa(job #689742)

Utilizator ion_calimanUAIC Ion Caliman ion_caliman Data 24 februarie 2012 19:40:31
Problema Ghiozdan Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
ifstream f("ghiozdan.in");
ofstream g("ghiozdan.out");

#define NMAX 20010
#define GMAX 75010

int A[200];
int S[GMAX];
int P[GMAX];
int N, G;

int main()
{
    int i, j, k, x;
    f >> N >> G;
    for (i=1; i<=N; i++){
        f >> x;
        A[x]++;
    }
    for (i=1; i<=200; i++){
        if (!A[i]) continue;
        for (k=G; k>0; k--){
            if (S[k] && S[k]!=i){
                for (j=1; j<=A[i] && k+j*i<=G; j++){
                    if (!S[k+j*i] || P[k+j*i] > P[k] + j) S[k+j*i] = i, P[k+j*i] = P[k] + j;
                    else break;
                }
            }
        }
        for (j=1; j<=A[i] && j*i<=G; j++) S[j*i] = i, P[j*i] = j;
    }
    for (i=G; !S[i]; i--);
    g << i << ' ' << P[i];
}