#include <iostream>
#include <algorithm>
using namespace std;
struct Goods{
int weight;
int value;
double per;//单位重量的价值
double load;//装多少权重
};
//定义sort函数比较器
int compare(Goods const&a,Goods const&b){
if(a.per>b.per)
return 1;
else
return 0;
}
//贪心算法
void Greedy(Goods g[],int good_number,int content){
for(int i=0;i<good_number;i++){
if(g[i].weight<content){
content-=g[i].weight;
g[i].load=1;
}else if(content>0){
g[i].load=(double)content/g[i].weight;
cout<<g[i].load;
content=0;
}
}
}
int main()
{ int n;
int bag;
double total_weight=0;
double total_value=0;
cout<<"请输入货物种类";
cin>>n;
cout<<"请输入背包大小"<<endl;
cin>>bag;
Goods gs[n+1];
cout<<"请依次输入每种货物的重量和价值"<<endl;
for(int i=0;i<n;i++){
cin>>gs[i].weight;
cin>>gs[i].value;
gs[i].per=double(gs[i].value/gs[i].weight);
gs[i].load=0;
}
sort(gs,gs+n,compare);
Greedy(gs,n,bag);
for(int i=0;i<n;i++){
if(gs[i].load>=0){
total_weight+=gs[i].load*gs[i].weight;
total_value+=gs[i].load*gs[i].value;
}else{
break;
}
}
cout<<"总容量为:"<<total_weight<<endl<<"总价值为:"<<total_value<<endl;
return 0;
}
贪心算法实现背包问题(背包可拆分)
最新推荐文章于 2021-10-13 21:35:24 发布