贪心算法入门

Posted printwangzhe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贪心算法入门相关的知识,希望对你有一定的参考价值。

贪心算法例题:

  技术图片

 

        技术图片

 

 代码:

  

 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 }

总结:

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

  

  

以上是关于贪心算法入门的主要内容,如果未能解决你的问题,请参考以下文章

763. 划分字母区间-贪心算法

算法详解:贪心算法入门

入门级贪心算法——java实现

贪心算法入门总结

贪心算法——精华入门总结...

见闻广博|贪心算法小入门