描述
A fat mouse prepared M pounds of cat food,ready to trade with the cats guarding the warehouse containing his
favorite food:peanut. The warehouse has N rooms.The ith room containsW[i] pounds of peanut and requires
F[i] pounds of cat food. Fatmouse does not have to trade for all the peanut in the room,instead,he may get
W[i]*a% pounds of peanut if he pays F[i]*a% pounds of cat food.The mouse is a stupid mouse,so can you tell
him the maximum amount of peanut he can obtain.
输入
The input consists of multiple test cases. Each test case begins with a line containing two non-negative integers M and N. Then N lines follow, each contains two non-negative integers W[i] and F[i] respectively. The test case is terminated by two -1. All integers are not greater than 1000.
输出
For each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum amount of penaut that FatMouse can obtain.
样例输入
5 3
7 2
4 3
5 2
20 3
25 18
24 15
15 10
-1 -1
样例输出
13.333
31.500
思路
胖老鼠准备英镑的猫粮,准备与猫的贸易保护仓库包含他最喜欢的食物:花生。仓库有N个房间。第i个房间containsW[i]磅的花生,需要F[我]磅的猫粮。胖老鼠不必对所有房间里的花生贸易,相反,他可能会得到W[i]%磅的花生如果他支付F[i] %磅的猫粮。胖老鼠是一个愚蠢的鼠,所以你能告诉他可以获得最大的花生。
先把性价比高的保住!!
AC-Code
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
class Thing implements Comparable<Thing>{
private double w;
private double f;
public double getW() {
return w;
}
public void setW(double w) {
this.w = w;
}
public double getF() {
return f;
}
public void setF(double f) {
this.f = f;
}
public int compareTo(Thing o) {
double a1 = this.w/this.f;
double a2 = o.w/o.f;
if(a1<a2)
{
return 1;
}
else {
return -1;
}
}
}
public class ACM824 {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
while(true) {
int m = sc.nextInt();
int n = sc.nextInt();
if((m!=-1&&n!=-1))
{
ArrayList<Thing> list =new ArrayList<Thing>();
for(int i = 0;i<n;i++)
{
Thing t = new Thing();
t.setW(sc.nextDouble());
t.setF(sc.nextDouble());
list.add(t);
}
Collections.sort(list);
double s=0;
for (Thing thing : list) {
if(m>0) {
if(thing.getF()<=m) {
s+=thing.getW();
m-=thing.getF();
}
else {
s+=m*(thing.getW()/thing.getF());
m=0;
}
}
else {
break;
}
}
System.out.println(String.format("%.3f", s));
}
else {
break;
}
}
sc.close();
}
}