#include <iostream>
using namespace std;
class GreedyKnapack{
public:
GreedyKnapack (int _weight[],int _value[],int capacity);
double *ComputeRatio();
void SortRatio(double _Ratio[]);
double ComputeProfit();
private:
int *weight;
int *value;
int capacity;
double profit;
};
GreedyKnapack::GreedyKnapack(int _weight[],int _value[],int _capacity){
weight=_weight;
value=_value;
capacity=_capacity;
profit=0;
return;
}
double *GreedyKnapack::ComputeRatio(){
double *Ratio=new double[5];
for (int i=0;i<5;i++)
Ratio[i]=(double)value[i]/weight[i];
return Ratio;
}
void GreedyKnapack::SortRatio(double _Ratio[]){
for (int i=0;i<5;i++)
for (int j=i+1;j<5;j++){
if (_Ratio[j]>_Ratio[i]){
int temp=weight[i];
weight[i]=weight[j];
weight[j]=temp;
temp=value[i];
value[i]=value[j];
value[j]=temp;
}
}
return;
}
double GreedyKnapack::ComputeProfit(){
int temp=0,i=0;
while (temp<=capacity){
if (i==5)break;
else{
if((weight[i]+temp)<=capacity){
profit+=value[i];
temp+=weight[i];
}
else{
int _weight=capacity -temp;
profit+=(double)_weight/weight[i]*value[i];
temp+=_weight;
}
}
i++;
}
return profit;
}
int main(){
int _weight[5]={1,2,3,4,5},_value[5]={3,10,6,3,5};
int _capacity=10;
GreedyKnapack *greedy=new GreedyKnapack(_weight,_value,_capacity);
double *ratios = greedy->ComputeRatio();
greedy->SortRatio(ratios);
cout<<"The Maximum Profit is: "<<greedy->ComputeProfit()<<endl;
return 0;
}
贪心算法C++
最新推荐文章于 2024-07-25 17:57:45 发布