Cod sursa(job #998690)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 17 septembrie 2013 20:44:23
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb

#include <cstdlib>
#include <vector>
#include <algorithm>

const int MAX_N(1005);
const int MAX_VALUE(50005);

int n;
int v [MAX_N];
bool Mark [MAX_VALUE];
std::vector<int> Result;

inline void Read (void)
{
	std::freopen("economie.in","r",stdin);
	std::scanf("%d",&n);
	for (int i(1) ; i <= n ; ++i)
		std::scanf("%d",&v[i]);
	std::fclose(stdin);
}

inline void Print (void)
{
	std::freopen("economie.out","w",stdout);
	std::printf("%d\n",static_cast<int>(Result.size()));
	for (auto it : Result)
		std::printf("%d\n",it);
	std::fclose(stdout);
}

inline void Greedy (void)
{
	Mark[0] = true;
	std::sort(v + 1,v + n + 1);
	int i, j, end;
	for (i = 1 ; i <= n ; ++i)
		if (!Mark[v[i]])
		{
			Result.push_back(v[i]);
			for (j = 0, end = v[n] - v[i] ; j <= end ; ++j)
				if (Mark[j])
					Mark[j + v[i]] = true;
		}
}

int main (void)
{
	Read();
	Greedy();
	Print();
	return 0;
}