Cod sursa(job #2193471)

Utilizator flibiaVisanu Cristian flibia Data 10 aprilie 2018 12:27:30
Problema Ghiozdan Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#pragma GCC optimize("03")
#include <bits/stdc++.h>

using namespace std;

ifstream in("ghiozdan.in");
ofstream out("ghiozdan.out");

int dp[2][75100], g[20100], n, G;
bool u;

int main(){
	in >> n >> G;
	for(int i = 1; i <= n; i++)
		in >> g[i];
	for(int i = 1; i <= n; i++){
		memset(dp[u], 0, sizeof dp[u]);
		dp[u][g[i]] = 1;
		for(int w = g[i]; w <= G; w++){
			if(dp[!u][w - g[i]])
				dp[u][w] = dp[!u][w - g[i]] + 1;
			if(dp[!u][w] && dp[!u][w] < dp[u][w])
				dp[u][w] = dp[!u][w];
		}
		u = !u;
	} 
	for(int i = G; i; i--)
		if(dp[!u][i]){
			out << i << ' ' << dp[!u][i];
			int sum = i;
			int nr = i / dp[!u][i];
			for(int j = 1; j < dp[!u][i]; j++)
				out << '\n' << nr, sum -= nr;
			out << '\n' << sum;
			return 0;
		}
	return 0;
}