HDU 1009 FatMouse' Trade

原题:http://acm.hdu.edu.cn/showproblem.php?pid=1009

Problem Description:

 FatMouse准备了M磅的Cat-Food,以便用来跟小Cat交换好吃的JavaBean。

 现在有N个房间,第i个房间有J[i]磅的JavaBean,其交换的筹码是F[i]磅的Cat-Food。

当然,FatMouse还是有很大的选择权的,对任意一个房间,它可以只交换一部分的Cat-Food。

现要求FatMouse以怎样的策略才能获得最多的Cat-Food。

Solution:

贪心入门题,对象数组排序时我用到了Comparator接口,个人在这上面花了点时间。

 

 1 import java.util.Arrays;
2 import java.util.Scanner;
3
4 public class Main {
5
6 /**
7 * 稻草人
8 * HDU 1009(AC)
9 */
10 public static Node[] node = new Node[1001];
11 public static void main(String[] args) {
12 Scanner in = new Scanner(System.in);
13 while(in.hasNext())
14 {
15 int mNum = in.nextInt();
16 int nNum = in.nextInt();
17
18 if(mNum==-1&&nNum==-1)
19 break;
20 for(int i=0;i<nNum;i++)
21 {
22 node[i] = new Node();
23 node[i].javaBeans = in.nextInt();
24 node[i].food = in.nextInt();
25 node[i].rex = node[i].javaBeans*(1.0)/node[i].food;
26 }
27 Arrays.sort(node,0, nNum);
28 getAns(mNum,nNum);
29 }
30
31 }
32 public static void getAns(int m,int n)
33 {
34 double reSum=0.0;
35 for(int i=0;i<n;i++)
36 {
37 if(node[i].food<=m){
38 m-=node[i].food;
39 reSum+=node[i].javaBeans;
40 }
41 else
42 {
43 reSum+=node[i].javaBeans*(1.0)*m/node[i].food;
44 break;
45 }
46 }
47 System.out.printf("%.3f",reSum);
48 System.out.println();
49 }
50
51 }
52 class Node implements Comparable<Node>
53 {
54 int javaBeans;
55 public int getJavaBeans() {
56 return javaBeans;
57 }
58 public void setJavaBeans(int javaBeans) {
59 this.javaBeans = javaBeans;
60 }
61 public int getFood() {
62 return food;
63 }
64 public void setFood(int food) {
65 this.food = food;
66 }
67 int food;
68 double rex;
69 public double getRex() {
70 return rex;
71 }
72 public void setRex(double rex) {
73 this.rex = rex;
74 }
75 @Override
76 public int compareTo(Node o) {
77 // 从大到小排序
78 if(o.getRex()>this.rex)
79 return 1;
80 else if(o.getRex()<this.rex)
81 return -1;
82 else
83 return 0;
84 }
85 }



posted @ 2012-02-09 16:02  JAVA那点事  阅读(360)  评论(0)    收藏  举报