Professional Documents
Culture Documents
2.
#include<iostream> #include<algorithm> using namespace std; struct Job
{
char id; int dead; int profit;
};
bool comparison(Job a, Job b)
{
return (a.profit > b.profit);
}
void printJobScheduling(Job arr[], int n)
{
sort(arr, arr+n, comparison); int result[n];
bool slot[n];
for (int i=0; i<n; i++) slot[i] = false;
for (int i=0; i<n; i++)
{
for (int j=min(n, arr[i].dead)-1; j>=0; j--)
{
if (slot[j]==false)
{
result[j] = i; slot[j] = true; break;
}
}
}
for (int i=0; i<n; i++) if (slot[i])
cout << arr[result[i]].id << " ";
}
int main()
{
Job arr[] = { {'a', 3, 30}, {'b', 4, 11}, {'c', 5, 42},
{'d', 2, 24}, {'e', 1, 34}};
int n = sizeof(arr)/sizeof(arr[0]);
cout << "Following is maximum profit sequence of jobs \n";
printJobScheduling(arr, n); return 0;
}
3.
FRACTIONAL KNAPSACK
#include <bits/stdc++.h> using namespace std; struct Item {
int value, weight;
Item(int value, int weight)
{
this->value=value; this->weight=weight;
}
};
bool cmp(struct Item a, struct Item b)
{
double r1 = (double)a.value / (double)a.weight; double r2 = (double)b.value / (double)b.weight;
return r1 > r2;
}
double fractionalKnapsack(int W, struct Item arr[], int n)
{
sort(arr, arr + n, cmp); 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; double finalvalue = 0.0;
0/1 KNAPSACK
#include <bits/stdc++.h> using namespace std;
int max(int a, int b)
{
return (a > b) ? a : b;
}
int knapSack(int W, int wt[], int val[], int n)
{
int i, w;
vector<vector<int>> K(n + 1, vector<int>(W + 1)); 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()
{
int val[] = { 60, 100, 120 };
int wt[] = { 10, 20, 30 };
int W = 50;
int n = sizeof(val) / sizeof(val[0]);