Cod sursa(job #2118667)

Utilizator eilerGabriel-Ciprian Stanciu eiler Data 30 ianuarie 2018 20:51:03
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
using namespace std;

int g[5001];
//bool sel[5001][10001];

/*void afiseaza(ofstream &f, int k, int q){
	if (k==0)
		return;

	if (sel[k][q]){
		afiseaza(f, k-1, q-g[k]);
		f << k << ' ';
	}
	else
		afiseaza(f, k-1, q);
}*/

int main(){
	int n, gmax, c[5001], cmax[5001];

	ifstream fin ("rucsac.in");
	fin >> n >> gmax;
	for (int i=1; i<=n; i++)
		fin >> g[i];
	for (int i=1; i<=n; i++)
		fin >> c[i];
	fin.close();

	for (int j=0; j<=gmax; j++)
		cmax[j]=0;

	for (int i=1; i<=n; i++){
		for (int r=gmax; r>0; r--)
			if (cmax[r]!=0){
				//sel[i][r]=false;
				if (r+g[i]<=gmax && cmax[r+g[i]]<cmax[r]+c[i]){
					cmax[r+g[i]]=cmax[r]+c[i];
					//sel[i][r+g[i]]=true;
				}
			}
		if (cmax[g[i]]<c[i]){
			cmax[g[i]]=c[i];
			//sel[i][g[i]]=true;
		}
	}

	ofstream fout ("rucsac.out");
	fout << cmax[gmax] << '\n';
	//afiseaza(fout, n, gmax);
	fout.close();

	return 0;
}