Welcome to HBH! If you have tried to register and didn't get a verification email, please using the following link to resend the verification email.

Unbounded Knapsack Problem - C++ Code Bank


Unbounded Knapsack Problem
This is my solution to the Unbounded Knapsack Problem using Dynamic Programming
                /*
	Solution to the Unbounded Knapsack Problem
		using Dynamic Programming

	Implemented by GTADarkDude

	For information on Knapsack Problems, check Wikipedia
*/
#include <iostream>
using namespace std;

//CAPACITY > 0 (Max weight)
const int CAPACITY = 15;
//AMOUNT > 0 (Number of objects)
const int AMOUNT = 5;
struct Object
{
	int weight, value;
};
typedef Object Objects[AMOUNT];
const Objects objects = {{12,4},{2,2},{1,2},{1,1},{4,10}};
//This is the example of Wikipedia (in the upper-right corner)
//value > 0, weight > 0
// (object will never get chosen when value <= 0, object will be chosen an infinite times when weight <= 0)

int fill_element(int memory[], const int c)
{
	int max = 0;
	for(int i=0; i<AMOUNT; i++)
	{
		if(objects[i].weight <= c)
		{
			const int temp = objects[i].value + memory[c-objects[i].weight];
			if(temp > max)
				max = temp;
		}
	}
	return max;
}

void print_solution(const int solution)
{
	cout << "\nIf you take a knapsack with a capacity of " << CAPACITY << " kg. and " << AMOUNT << " objects with the following data:\n";
	for(int i=0; i<AMOUNT; i++)
		cout << i+1 << "\tWeight: " << objects[i].weight << " kg.\tValue: " << objects[i].value << endl;
	cout << "Then the highest value that can be achieved with this knapsack is: " << solution << endl;
}

int main()
{
	cout << "****** Unbounded Knapsack Problem ******\n";
	cout << "*                       by GTADarkDude *\n";
	cout << "****************************************\n";
	int memory[CAPACITY+1];
	memory[0] = 0;

	for(int c=1; c<=CAPACITY; c++)
		memory[c] = fill_element(memory, c);

	print_solution(memory[CAPACITY]);
	return 0;
}

            
Comments
Sorry but there are no comments to display