1. Knapsack Problem (Allows partial storage)
#include <iostream>
#include <algorithm>
using namespace std;
const int n=4;
int cont=100;
double tvalue=0;
struct item{
int weight;
int value;
double ValperWei;
double load;
};
item all[n];
int cmp(item const &a, item const &b){
if(a.ValperWei<b.ValperWei) return 0;
else return 1;
}
void Greedy(){
for(int i=0;i<n;i++){
if(cont>=all[i].weight){
cont-=all[i].weight;
all[i].load=1;
tvalue+=all[i].value;
}
else if(cont>0){
all[i].load=(double)cont/all[i].weight;
tvalue+=double(all[i].load*all[i].value);
cont=0;
return;
}
}
}
int main(){
double per;
for(int i=0;i<n;i++){
cin>>all[i].weight>>all[i].value;
per=double(all[i].value/all[i].weight);
all[i].ValperWei=per;
}
sort(all,all+n,cmp);
Greedy();
for(int i=0;i<n;i++){
cout<<all[i].weight<<' '<<all[i].load<<' ';
}
cout<<endl<<tvalue<<endl;
}
2. Taking boat problem
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int n=5;
const int capacity=5;
int ppl[n]={1,5,5,5,4};
int boatsum=0;
void boat(){
sort(ppl,ppl+n);
int i=0;
int j=n-1;
while(i<=j){
if(i==j){
boatsum++;
printf("boat%d: %d\n",boatsum,ppl[i]);
break;
}
if(ppl[i]+ppl[j]<=capacity){
boatsum++;
printf("boat%d: %d %d\n",boatsum,ppl[i],ppl[j]);
i++;
j--;
}
else{
boatsum++;
printf("boat%d: %d\n",boatsum,ppl[j]);
j--;
}
}
}