贪心算法入门
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 }
总结:
贪心算法通过每一步最优,来达到总体最优。(有时候贪心算法不一定能取到最优解)
以上是关于贪心算法入门的主要内容,如果未能解决你的问题,请参考以下文章