HDOJ 1009 FatMouse' Trade

题意: 老鼠有m 磅猫粮, 有n 个房间,每个房间有j[i] 磅javaben, 求老鼠能够最多能换取多少javabean,交换规则是:用 f[i] *a% 换得j[i] * a% 磅javaben.如:j[i] = 7, f[i] = 2, 那么老鼠只要拿2 磅的猫粮就可以换7 磅的javaben, 那1 磅猫粮可以换3.5 磅 javaben,以此类推。

思路: 说是简单贪心,每个房间求一个scale = f[i] / j[i], 从最大的scale 换起,思路很明显, 就是一些细节没考虑的啊,WA了无数次,%>_<%。。。

WA: 1.是数据类型定义错了。

    2.然后是没有考虑到当f[i] == 0 的时候要全部加进去。

 

6982661 2012-10-24 09:55:05 Accepted 1009 109MS 296K 946 B C++ 罗维

 

View Code
 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 struct room
 6 { 
 7     double javaBen;   //注意数据类型
 8     double catFood;
 9     double scale;
10 };
11 
12 bool cmp(room a, room b)
13 {
14     return a.scale > b.scale;
15 }
16 
17 int main()
18 {
19     room trade[1001];
20     double obtain;
21     double  m;
22     int i, n;
23     while (scanf("%lf %d", &m, &n)!=EOF &&(n!=-1 || m!=-1))
24     {
25         obtain = 0;
26         for (i=0; i<n; i++)
27         {
28                 cin>>trade[i].javaBen>>trade[i].catFood;
29                 trade[i].scale =   trade[i].catFood != 0 ? trade[i].javaBen/trade[i].catFood  : trade[i].javaBen;
30                 if (trade[i].catFood == 0)   //加进去在下边要剔除
31                     obtain += trade[i].javaBen;
32         }
33         
34         sort(trade, trade+n, cmp);
35         for (i=0; i<n && m!=0; i++)
36         {
37             if (trade[i].catFood == 0)   //剔除,上边已经交换过了。
38                 continue;
39             if (m >= trade[i].catFood)
40             {
41                 m -= trade[i].catFood;
42                 obtain += trade[i].javaBen;
43             }
44             else
45             {
46                 obtain += trade[i].scale * m;
47                 m = 0;
48             }
49         }
50         printf("%.03lf\n", obtain);
51 
52     }
53     return 0;
54 }

 

 

 

 

 

posted @ 2012-10-24 10:09  旅行的蜗牛  阅读(192)  评论(0编辑  收藏  举报