贪心算法的背包问题和0-1背包问题几乎一样,都是先往背包里面放入获益更大的物品,唯一的不同就是,0-1背包是要么放入物品要么不放入物品,而贪心法可以把物品的一部分放入背包中。
要记得在进行放入物品前,这些物品的已经按权重排好了顺序,才依次往背包里放。下面来看看代码
#include<iostream>
using namespace std;
void greedpackage(int p[],int w[],int M,int n) {
int i = 0;
double c[] = { 0,0,0,0 };
for (i; i < n; i++) {
if (w[i] <= M) {
c[i] = 1;
M -= w[i];
}
else
break;
}
if (i < n) {
c[i] = (double)M / w[i];
}
for (i = 0; i < n; i++) {
cout << c[i] << endl;
}
}
int main() {
int p[4] = { 20,15,10,5 };
int w[4] = { 15,10,5,2 };//数组w是已经按权重由大到小排列好的,权重=w[i]/p[i]
int M = 28;
greedpackage(p, w, M, 4);
system("pause");
return 0;
}
主函数中提到的排序,可以由我的上一篇文章快速排序实现。