Cod sursa(job #2452026)

Utilizator davidcotigacotiga david davidcotiga Data 29 august 2019 11:17:56
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include<stdio.h> 
#include <fstream>

using namespace std;

// A utility function that returns maximum of two integers 
int max(int a, int b) { return (a > b) ? a : b; }

// Returns the maximum value that can be put in a knapsack of capacity W 
int knapSack(int W, int wt[], int val[], int n)
{
	int i, w;
	int K[10001][10001];

	// Build table K[][] in bottom up manner 
	for (i = 0; i <= n; i++)
	{
		for (w = 0; w <= W; w++)
		{
			if (i == 0 || w == 0)
				K[i][w] = 0;
			else if (wt[i - 1] <= w)
				K[i][w] = max(val[i - 1] + K[i - 1][w - wt[i - 1]], K[i - 1][w]);
			else
				K[i][w] = K[i - 1][w];
		}
	}

	return K[n][W];
}

int main()
{
	ifstream fin("rucsac.in");
	ofstream fout("rucsac.out");
	int val[10001];
	int wt[10001];
	int  W;
	int n;
	fin >> n >> W;
	for (int i = 0; i < n; ++i) {
		fin >> wt[i] >> val[i];
	}
	fout << knapSack(W, wt, val, n);

	return 0;
}