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 的时候要全部加进去。

 

69826612012-10-24 09:55:05Accepted1009109MS296K946 BC++罗维

 

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 }

 

 

 

 

 

转载于:https://www.cnblogs.com/lv-2012/archive/2012/10/24/2736639.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值