HDU-1009 贪心

题目描述:题意大概就是FatMouse有M磅的鼠食,它用鼠食去换存放于N个房间的JavaBeans,每个房间存放的JavaBeans需要定义对应的兑换鼠食的数量。需要问在什么情况下,FatMouse能换得最多的JavaBeans。

注意:如果剩下的鼠食不足以兑换该房间的JavaBeans,则需要以一定的比率兑换。

 

算法思路: 典型的贪心应用

算法代码:

View Code
 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 struct fatmouse
 5 {
 6     double j,f;
 7     double ratio;
 8 }p[1001];
 9 
10 int comp(struct fatmouse &a,struct fatmouse &b)
11 {
12     return a.ratio>b.ratio;
13 }
14 int main()
15 {
16     int m,n;
17     while(cin>>m>>n && (m!=-1 || n!=-1))
18     {
19         int i;
20         for(i=0;i<n;++i)
21         {
22             cin>>p[i].j>>p[i].f;
23             p[i].ratio=p[i].j/p[i].f;
24         }
25         sort(p,p+n,comp);
26         double sum=0;
27         for(i=0;i<n;++i)
28         {
29             if(m>p[i].f)
30             {
31                 sum+=p[i].j;
32                 m-=p[i].f;
33             }
34             else
35             {
36                 sum+=p[i].ratio*m;
37                 m=0;
38                 break;
39             }
40         }
41         printf("%.3lf\n",sum);    
42     }
43     return 0;
44 }

 

posted @ 2013-03-20 20:18  ballwql  阅读(204)  评论(0编辑  收藏  举报