Cod sursa(job #2286956)

Utilizator plains4Sebastian Mualim plains4 Data 21 noiembrie 2018 04:26:19
Problema Ghiozdan Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<bits/stdc++.h>

using namespace std;

const int MX = 75000;
const int N = 200;

int ar[N + 1];
bitset<MX + 1> dp[N + 1];

int main(){
	freopen("ghiozdan.in", "r", stdin);
	freopen("ghiozdan.out", "w", stdout);
	int n, g; cin >> n >> g;
	for(int i = 0; i < n; ++i){
		int x; cin >> x;
		ar[x]++;
	}
	
	dp[0][0] = true;
	for(int i = 1; i <= N; ++i){
		for(int j = 0; j <= ar[i]; ++j){
			dp[i] |= (dp[i - 1] << (j * i));
		}
	}
	
	int mx = 0;
	int mn = 0;
	for(int i = 0; i <= g; ++i) if(dp[N][i])mx = i;
	vector<int> ans;
	
	int cur = mx;
	for(int i = N; i >= 0; --i){
		for(int j = ar[i]; j >= 0; --j){
			int nx = cur - j * i;
			if(nx < 0)continue;
			if(dp[i - 1][nx]){
				cur = nx;
				while(j--)ans.push_back(i);
			}
		}
	}
	
	sort(ans.begin(), ans.end());
	cout << mx << " " << ans.size() << endl;
	for(int i = 0; i < ans.size(); ++i){
		cout << ans[i] << endl;
	}
}