Cod sursa(job #3033130)

Utilizator matthriscuMatt . matthriscu Data 23 martie 2023 13:39:14
Problema Ghiozdan Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <bits/stdc++.h>
using namespace std;

#define NMAX 20005
#define GMAX 75005
#define OBJMAX 205

int freq[OBJMAX], dp[GMAX], sol[GMAX];

int main() {
	ifstream fin("ghiozdan.in");
	ofstream fout("ghiozdan.out");

	int n, g;
	fin >> n >> g;

	int mx = 0;
	for (int i = 1, x; i <= n; ++i) {
		fin >> x;
		++freq[x];
		mx = max(x, mx);
	}

	for (int i = mx; i >= 1; --i)
		if (freq[i])
			for (int j = g - i; j >= 0; --j)
				if (dp[j] || !j)
					for (int k = 1; k <= freq[i] && j + i * k <= g && !dp[j + i * k]; ++k) {
						sol[j + i * k] = i;
						dp[j + i * k] = dp[j] + k;
					}

	for (int i = g; i >= 1; --i)
		if (dp[i]) {	
			mx = i;
			break;
		}

	fout << mx << ' ' << dp[mx] << '\n';
	for (int i = mx; i >= 1; i -= sol[i])
		fout << sol[i] << '\n';
}