Cod sursa(job #2588863)

Utilizator MocalinnoMoca Andrei Catalin Mocalinno Data 25 martie 2020 15:40:13
Problema Ghiozdan Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <bits/stdc++.h>
#define PLEC fin.close(); fout.close(); return 0;
using namespace std;
ifstream fin("ghiozdan.in");
ofstream fout("ghiozdan.out");
int n, sum, x, freq[205], dp[75005], last[75005], to;
int main()
{
    fin >> n >> sum;
    for (int i = 1; i <= n; ++i) {
        fin >> x;
        ++freq[x];
    }
    dp[0] = 1;
    for (int i = 200; i; --i)
        if (freq[i])
            for (int g = sum; g >= 0; --g)
                if (dp[g]) {
                    to = min(freq[i], (sum - g) / i);
                    for (int k = 1; k <= to; ++k)
                        if (!dp[k * i + g])
                            dp[k * i + g] = dp[g] + k, last[k * i + g] = i;
                }
    while (!dp[sum])
        --sum;
    fout << sum << ' ' << dp[sum] - 1 << '\n';
    while (--dp[sum]) {
        fout << last[sum] << '\n';
        sum -= last[sum];
    }
    PLEC
}