You are on page 1of 3

ADA Assignment 2

Name - Panshul Saxena


Batch - 2CS10
Roll No - 102196006
1.
#include <bits/stdc++.h> using namespace std;
void printMaxActivities(int s[], int f[], int n)
{
int i, j;
cout <<"Following activities are selected "<< endl; i = 0;
cout <<" "<< i;
for (j = 1; j < n; j++)
{
if (s[j] >= f[i])
{
cout <<" " << j; i = j;
}
}
}
int main()
{
int s[] = {9, 2, 4, 6, 2, 1};
int f[] = {32, 43, 36, 37, 94, 91};
int n = sizeof(s)/sizeof(s[0]); printMaxActivities(s, f, n); return 0;
}

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;

for (int i = 0; i < n; i++) {


if (curWeight + arr[i].weight <= W) { curWeight += arr[i].weight; finalvalue += arr[i].value;
}
else {
int remain = W - curWeight; finalvalue += arr[i].value
* ((double)remain
/ (double)arr[i].weight); break;
}
}
return finalvalue;
}
int main()
{
int W = 50;
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/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]);

cout << knapSack(W, wt, val, n);


return 0;
}

You might also like