Cod sursa(job #1210389)

Utilizator an_drey_curentandreycurent an_drey_curent Data 19 iulie 2014 20:22:41
Problema Problema rucsacului Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<stdio.h>
#include<vector>
using namespace std;
FILE *in, *out;
vector<pair<int, int>> V;
int N, G, D[2][10000];
void open()
{
	in = fopen("rucsac.in", "rt");
	out = fopen("rucsac.out", "wt");
}
void read()
{
	fscanf(in, "%d %d", &N, &G);
	for (int i = 0; i < N; i++)
	{
		int w, p;
		fscanf(in, "%d %d", &w, &p);
		V.push_back(make_pair(w, p));
	}
}
void dp()
{
	D[1][0] = 0;

	for (int i = 1; i <= N; i++)
		for (int j = 1; j <= G; j++)
		{
			int alt = i % 2;
			D[alt][j] = D[1 - alt][j];
			if (j >= V[i - 1].first)
			{
				if (D[alt][j] < D[1 - alt][j - V[i - 1].first] + V[i - 1].second)
				{
					D[alt][j] = D[1 - alt][j - V[i - 1].first] + V[i - 1].second;
				}
			}
		}
}
void write()
{
	int alt = N % 2;
	fprintf(out, "%d", D[alt][G]);
}
int main()
{
	open();
	read();
	dp();
	write();
	return 0;
}