Skip to content

Commit

Permalink
Create Knapsack Problem
Browse files Browse the repository at this point in the history
  • Loading branch information
AyushiChakrabarty authored Sep 17, 2020
1 parent e6bb07a commit 52f31bc
Showing 1 changed file with 77 additions and 0 deletions.
77 changes: 77 additions & 0 deletions Knapsack Problem
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
// C/C++ program to solve fractional Knapsack Problem
#include <bits/stdc++.h>

using namespace std;

// Structure for an item which stores weight and corresponding
// value of Item
struct Item
{
int value, weight;

// Constructor
Item(int value, int weight) : value(value), weight(weight)
{}
};

// Comparison function to sort Item according to val/weight ratio
bool cmp(struct Item a, struct Item b)
{
double r1 = (double)a.value / a.weight;
double r2 = (double)b.value / b.weight;
return r1 > r2;
}

// Main greedy function to solve problem
double fractionalKnapsack(int W, struct Item arr[], int n)
{
// sorting Item on basis of ratio
sort(arr, arr + n, cmp);

// Uncomment to see new order of Items with their ratio
/*
for (int i = 0; i < n; i++)
{
cout << arr[i].value << " " << arr[i].weight << " : "
<< ((double)arr[i].value / arr[i].weight) << endl;
}
*/

int curWeight = 0; // Current weight in knapsack
double finalvalue = 0.0; // Result (value in Knapsack)

// Looping through all Items
for (int i = 0; i < n; i++)
{
// If adding Item won't overflow, add it completely
if (curWeight + arr[i].weight <= W)
{
curWeight += arr[i].weight;
finalvalue += arr[i].value;
}

// If we can't add current Item, add fractional part of it
else
{
int remain = W - curWeight;
finalvalue += arr[i].value * ((double) remain / arr[i].weight);
break;
}
}

// Returning final value
return finalvalue;
}

// driver program to test above function
int main()
{
int W = 50; // Weight of knapsack
Item arr[] = {{60, 10}, {100, 20}, {120, 30}};

int n = sizeof(arr) / sizeof(arr[0]);

cout << "Maximum value we can obtain = "
<< fractionalKnapsack(W, arr, n);
return 0;
}

0 comments on commit 52f31bc

Please sign in to comment.