问题描述:一艘船的载重量为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 }