贪心算法入门

贪心算法例题:

  

 

        

 

 代码:

  

 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 }

总结:

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

  

  

posted @ 2020-02-20 16:25  PRINT王哲  阅读(248)  评论(0编辑  收藏  举报
Live2D