贪心练习最优装载问题


 

问题描述:一艘船的载重量为C,每件物品的重量为wi,要将尽量多的物品装入到船上。


问题分析:要求装载的物品数目最多,载重量是固定的,那么优先把重量最小的物品装进去

(1)c是固定的,wi越小,装载的数量就越大;依次选择最轻的物品,直到不能装载为止;

(2)把n个物品重量从小到大排序,根据贪心策略选出最轻的i个物品,直到不能装载为止,就能从局部最优达到全局最优;
 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 const int MAXN=10000;
 5 double a[MAXN];                //用来存物品的重量 
 6 int ans=0;                    //记录装入物品数 
 7 double sum=0;                //记录装入物品的总重量 
 8 int main(){
 9     int n;
10     double c;
11     cin>>c>>n;
12     for(int i=0;i<n;i++)
13         cin>>a[i];
14     sort(a,a+n);            //按照重量从小到大排序 
15     for(int i=0;i<n;i++){
16         sum+=a[i];
17         if(sum<=c)
18             ans++;
19         else
20             break;
21     } 
22     cout<<ans<<endl;
23     return 0;
24 } 

 

posted on 2020-02-28 15:44  恒晨  阅读(234)  评论(0编辑  收藏  举报

导航