#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;
}
贪心算法实现背包问题(背包可拆分)
原文作者:贪心算法
原文地址: https://blog.csdn.net/qq_39147516/article/details/78418314
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/qq_39147516/article/details/78418314
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。