Cod sursa(job #2315174)

Utilizator daniela12Sandu Daniela Teodora daniela12 Data 9 ianuarie 2019 15:35:54
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream f("rucsac.in");
ofstream g("rucsac.out");
struct obiect
{
	int c, g;
};
int n, G;
vector <obiect> o;
vector <vector<int>> d; //d[i][j]=costul maxim pe care il obtinem considerand doar primele i obiecte, avand la dispozitie greutate j
void citire()
{
	f >> n >> G;
	o.resize(n + 3);
	d.resize(n + 3);
	int i;
	for (i = 1; i <= n; i++)
	{
		f >> o[i].g >> o[i].c;
		d[i].resize(G + 3);
	}
	f.close();
}
int main()
{
	citire();
	int i, j;
	for (j = 1; j <= G; j++) //pentru primul obiect
	{
		d[1][j] = 0;
		if (o[1].g <= j)
			d[1][j] = o[1].c;
	}
	for (i = 2; i <= n; i++)	//pentru greutate 1
	{
		d[i][1] = 0;
		if (o[i].g <= 1)
			d[i][1] = o[i].c;
	}
	for (i = 2; i <= n; i++)
	{
		for (j = 1; j <= G; j++)
		{	
			if(j>o[i].g)
				d[i][j] = max(d[i-1][j],d[i-1][j-o[i].g]+o[i].c);
		}
	}
	g << d[n][G] << "\n";
	g.close();
	return 0;
}