zoukankan      html  css  js  c++  java
  • 贪心算法入门

    贪心算法例题:

      

            

     代码:

      

     1 /*
     2     取糖果
     3     输入:4 15    //四箱,能装的重量为15 
     4                 //价值,重量 
     5          100 4
     6          412 8
     7          266 7
     8          591 2
     9     输出:
    10         1193.0 
    11 */
    12 
    13 #include<iostream>
    14 #include<algorithm>
    15 using namespace std;
    16 
    17 struct candy{
    18     double v,m;//v是价值,m是重量 
    19     
    20 }candies[100];
    21 
    22 bool bmp(candy &a,candy &b){
    23     return (a.v/a.m)>(b.v/b.m);
    24 }
    25 
    26 int main(){
    27     int n,i;
    28     double sum;
    29     double value=0;
    30     cout<<"请输入糖果箱数n"<<endl;
    31     cin>>n;
    32     cout<<"请输入能容纳的总重量"<<endl;
    33     cin>>sum;
    34     
    35     for(i=1;i<=n;i++)
    36         cin>>candies[i].v>>candies[i].m;
    37     sort(candies+1,candies+1+n,bmp);
    38     for(i=1;i<=n;i++)
    39         cout<<candies[i].v<<" ";
    40     for(i=1;i<=n;i++)
    41         {
    42             if(sum>=candies[i].m)//看能否全装
    43                 {
    44                     value=value+candies[i].v;
    45                     sum=sum-candies[i].m;        
    46                 } 
    47             else                //需要分装 
    48                 {
    49                     value=value+sum*(candies[i].v/candies[i].m);
    50                     break;
    51                     
    52                 }
    53             
    54             
    55             
    56         }
    57     cout<<value<<endl;
    58     
    59     return 0;
    60 }

    总结:

      贪心算法通过每一步最优,来达到总体最优。(有时候贪心算法不一定能取到最优解)

      

      

  • 相关阅读:
    web端常见兼容性问题整理
    浏览器初始化样式
    html5特效库
    csshack
    进程与线程,并发、并行、异步、多线程
    js复制粘贴事件
    dom range相关
    vue和react在使用上的对比
    ListView往TreView里面拖拽
    ListView添加项目带序列
  • 原文地址:https://www.cnblogs.com/printwangzhe/p/12336257.html
Copyright © 2011-2022 走看看