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接口,個人在這上面花了點時間。

JAVA 代碼(AC):

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	/**
	 * 稻草人
	 * HDU 1009(AC)
	 */
	public static Node[] node = new Node[1001];
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while(in.hasNext())
		{
			int mNum = in.nextInt();
			int nNum = in.nextInt();
			
			if(mNum==-1&&nNum==-1)
				break;
			for(int i=0;i<nNum;i++)
			{
				node[i] = new Node();
				node[i].javaBeans = in.nextInt();
				node[i].food = in.nextInt();
				node[i].rex = node[i].javaBeans*(1.0)/node[i].food;
			}
			Arrays.sort(node,0, nNum);
			getAns(mNum,nNum);
		}

	}
	public static void getAns(int m,int n)
	{
		double reSum=0.0;
		for(int i=0;i<n;i++)
		{
			if(node[i].food<=m){
				m-=node[i].food;
				reSum+=node[i].javaBeans;
			}
			else
			{
				reSum+=node[i].javaBeans*(1.0)*m/node[i].food;
				break;
			}
		}
		System.out.printf("%.3f",reSum);
		System.out.println();
	}

}
class Node implements Comparable<Node>
{
	int javaBeans;
	public int getJavaBeans() {
		return javaBeans;
	}
	public void setJavaBeans(int javaBeans) {
		this.javaBeans = javaBeans;
	}
	public int getFood() {
		return food;
	}
	public void setFood(int food) {
		this.food = food;
	}
	int food;
	double rex;
	public double getRex() {
		return rex;
	}
	public void setRex(double rex) {
		this.rex = rex;
	}
	@Override
	public int compareTo(Node o) {
		// 從大到小排序
		if(o.getRex()>this.rex)
			return 1;
		else if(o.getRex()<this.rex)
			return -1;
		else
			return 0;
	}
}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章