Cod sursa(job #2472293)

Utilizator borscalinCalin-Stefan Georgescu borscalin Data 12 octombrie 2019 11:06:05
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <iostream>
#include <fstream>
#define NMAX 5000
#define GMAX 10000

std::ifstream fin("rucsac.in");
std::ofstream fout("rucsac.out");

int N, G;
int dp[2][1 + GMAX];
int weigth[1 + NMAX];
int profit[1 + NMAX];

int main() {

	std::cin >> N >> G;

	for ( int i = 1; i <= N; ++i )
		//std::cin >> weigth[i] >> profit[i];
		fin >> weigth[i] >> profit[i];
	int current = 1;
	int last = 0;

	for ( int i = 1; i <= N; ++i ) {
		for ( int w = 1; w <= G; ++w ) {
			if ( w >= weigth[i] ) 
				dp[current][w] = std::max ( dp[last][w], dp[last][w - weigth[i]] + profit[i] );
			else
				dp[current][w] = dp[last][w];
		}
		std::swap ( current, last );
	}

	//std::cout << dp[last][G] << '\n';
	fout << dp[last][G] << '\n';
	
	return 0;
}