贪心算法入门


贪心算法例题:

        

 代码:

 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
14 #include
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<" ";
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<endl;
58     
59     return 0;
60 }

总结:

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