zoukankan      html  css  js  c++  java
  • 贪心练习最优装载问题


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

  • 相关阅读:
    程序员修炼之道阅读笔记02
    第十五周课堂练习-查找最长单词链
    文件读写总结
    第十五周
    暑假总结1
    软件工程课程总结
    第十六周总结
    用户场景分析
    学期课后个人总结
    第十五周总结
  • 原文地址:https://www.cnblogs.com/ZKYAAA/p/12377502.html
Copyright © 2011-2022 走看看