Cod sursa(job #709038)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 7 martie 2012 17:07:33
Problema Ghiozdan Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
#include <algorithm>
#define NMAx 20100
#define GMAx 75100
using namespace std;

int N,G,A[NMAx],V[GMAx],T[GMAx];

void citire() {
	
	ifstream in("ghiozdan.in");
	in>>N>>G;
	
	for(int i=1;i<=N;i++)
		in>>A[i];
	
	in.close();
	
}
void afis() {
	
	int i,k=0,Nr;
	ofstream out("ghiozdan.out");
	
	for(i=G;!V[i];i--);
	Nr=V[i]-1;
	
	out<<i<<' '<<Nr<<'\n';
	
	for(;T[i];i=T[i])
		V[++k]=i-T[i];
	V[++k]=i;
	
	for(i=1;i<=Nr;i++)
		out<<V[i]<<'\n';
	
	out.close();
	
}
int main() {
	
	int i,j,mX;
	
	citire();
	
	sort(A+1,A+N+1);
	reverse(A+1,A+N+1);
	
	V[0]=1;
	mX=0;
	
	for(i=1;i<=N;i++)
		for(j=min(mX,G-A[i]);j>=0;j--)
			if(V[j]&&!V[j+A[i]]) {
				V[j+A[i]]=V[j]+1;
				T[j+A[i]]=j;
				if(j+A[i]>mX)
					mX=j+A[i];
				}
	
	afis();
	
	return 0;
	
}