Cod sursa(job #2581779)

Utilizator topala.andreiTopala Andrei topala.andrei Data 15 martie 2020 19:40:23
Problema Problema rucsacului Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>
#define MAXN 5001
#define MAXG 10001

using namespace std;

ifstream f("rucsac.in");
ofstream g("rucsac.out");

int N, G;
int weight[MAXN], price[MAXN];


void read() {
	f >> N >> G;
	for (int i = 1; i <= N; ++i) { 
		f >> weight[i] >> price[i];
	}
}
int knapsack() {
	int dp[MAXN][MAXG] = {0};
	for (int i = 1; i <= N; ++i) {
		for (int j = 1; j <= G; ++j) {
			if (j - weight[i] >= 0) {
				dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + price[i]);
			} else {
				dp[i][j] = dp[i - 1][j];
			}
		}
	}
	return dp[N][G];
}
int knapsack_efficient() {
	int dp[MAXG] = {0};
	for (int i = 1; i <= N; ++i) {
		for (int j = G; j >= 1; --j) {
			if (j - weight[i] >= 0) {
				dp[j] = max(dp[j], dp[j - weight[i]] + price[i]);
			}
		}
	}
	return dp[G];
}
 int main() {
	read();
	g << knapsack_efficient();

	return 0;
}