Cod sursa(job #2361301)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 2 martie 2019 14:25:02
Problema Ghiozdan Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>
#include <algorithm>
using namespace std;
const int INF = 2.e9;
int f[205] , g[75005] , nr[75005];
int main()
{
    freopen("ghiozdan.in" , "r" , stdin);
    freopen("ghiozdan.out" , "w" , stdout);
    int n , G , i , j , k , x;
    scanf("%d%d" , &n , &G);
    for(i = 1 ; i <= n ; i ++)
    {
        scanf("%d" , &x);
        f[x] ++;
    }
    for(i = 1 ; i <= G ; i ++)
        g[i] = INF;
    g[0] = 0;
    for(i = 200 ; i >= 1 ; i --)
        if(f[i])
            for(j = G - i ; j >= 0 ; j --)
                if(g[j] != INF)
                    for(k = 1 ; k <= f[i] && j + k * i <= G && g[j + k * i] == INF ; k ++)
                    {
                        g[j + k * i] = g[j] + k;
                        nr[j + k * i] = i;
                    }
    for(i = G ; i >= 1 ; i --)
        if(g[i] != INF)
        {
            printf("%d %d\n" , i , g[i]);
            for(j = i ; j > 0 ; j = j - nr[j])
                printf("%d\n" , nr[j]);
            break;
        }
    return 0;
}