Cod sursa(job #951824)

Utilizator robert_stefanRobert Stefan robert_stefan Data 21 mai 2013 20:10:28
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<fstream>
#define IN "rucsac.in"
#define OUT "rucsac.out"
#define MAX 10000

using namespace std;

void Citeste();
void Rezolva();
void Scrie();

int n, gMax;
int g[MAX], c[MAX];
int cMax[MAX+1], uz[MAX+1][MAX+1];

int main()
{
	Citeste();
	Rezolva();
	Scrie();
	return 0;
}

void Citeste()
{
	ifstream in(IN);
	in>>n>>gMax;
	for(int i=1; i<=n; i++)
		in>>g[i]>>c[i];
	in.close();
}

void  Rezolva()
{
	int S, i, k;
	for(S=1; S<=gMax; S++)
		cMax[S]=-1;
	for(S=1; S<=gMax; ++S)
		for(i=1; i<=n; i++)
			if(g[i]<=S && cMax[S-g[i]]!=-1 && !uz[S-g[i]][i])
				if(cMax[S]<c[i]+cMax[S-g[i]])
				{
					cMax[S]=c[i]+cMax[S-g[i]];
					for(k=1; k<=n; k++)
						uz[S][k]=uz[S-g[i]][k];
					uz[S][i]=1;
				}
}

void Scrie()
{
	ofstream out(OUT);
	if(cMax[gMax==-1])
		out<<"IMPOSIBIL";
	else
	{
		out<<cMax[gMax]<<'\n';
		/*for(int k=1; k<=n; k++)
			if(uz[gMax][k])
				out<<k<<' ';
		out<<'\n';*/
	}
	out.close();
}