问题描述:
贪心算法最简单的就是用来解决最优装载问题,在确定最大装载容量的情况下,要求装载的物品的数量尽可能多,那么优先把重量小的物品放进去,在容量固定的情况下,装的物品最多。采用重量最轻者先装的岩心选择策略,从局部最优达到全局最优,从而产生最优装载问题的最优解。
算法设计:
- 当载重量为定值c时,Wi越小,可装载的物品数量n最大。只要依次按照选择最小的重量的物品,直到不能再装为止。
- 把n个物品的重量从小到大排序,然后根据贪心策略尽可能多地选出前i个物品,直到不能装载位置,此时达到最优。
源代码 :
#include <iostream> #include <algorithm> #include <cstring> #include <cstdlib> using namespace std; const int N =111111; double weight[N];//物品重量数组 int main() { double carry; int n; cout << "请输入最大载重量重量c和物品数量n :" << endl; cin >> carry>>n; cout << "请输入每个物品的重量:" << endl; for(int i=0; i<n; i++) { cin >> weight[i]; } sort(weight,weight+n); double temp=0.0;//已经装进的物品的重量 int number=0;//已经装进的物品的数量 for(int i=0; i<n; i++) { temp+=weight[i]; if(temp<carry) { number++; } else { break; } } cout << "能装入物品的最大数量为:" << endl; cout << number << endl; return 0; }