Cod sursa(job #788673)

Utilizator visanrVisan Radu visanr Data 15 septembrie 2012 15:55:59
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.25 kb
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;


int ap[210], A[80000], B[80000], N, G, X, start = -1;


int main()
{
    freopen("ghiozdan.in", "r", stdin);
    freopen("ghiozdan.out", "w", stdout);
    int i, j, k;
    scanf("%i %i", &N, &G);
    for(i = 1; i <= N; i++)
    {
          scanf("%i", &X);
          ap[X] ++;
    }
    B[0] = 1;
    for(i = 209; i; i--)
          for(j = G - i; j >= 0; j--)
                if(ap[i] && B[j])
                {
                         for(k = i; k <= ap[i] * i && j + k <= G; k += i)
                               if(B[j + k] == 0)
                               {
                                      A[j + k] = i;
                                      B[j + k] = B[j] + k / i;
                               }else
                               {
                                    break;
                               }
                }
    for(i = G; i >= 0 && start == -1; i--)
          if(B[i] > 0)
                  start = i;
    printf("%i %i\n", start, B[start] - 1);
    while(start != 0)
    {
                printf("%i\n", A[start]);
                start -= A[start];
    }
    return 0;
}