这个题目用了下类的自然排序,之前都没咋地用过刚好练习练习:(自然排序的时候是升序所以注意下判断的返回值就行了),
质量方面可能不会很好,随意看看就行,有问题什么的都是可以说的
或者对于我的方法不太懂得可以找我聊聊QQ1282573995,也可以来找我一起来或者有人愿意带我的这枚小白的
也很是欢迎的(掌声)~~~
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1009
题目大意:
Fat mouse 拿着它的M磅猫粮去换取食物,有n间房间,第i间有J[i]磅食物,用F[i]*a%换取J[i]*a%的食物,
问最多换多少食物,保留三位小数
做法的话贪心就行
代码
import java.util.*;
class Main
{
public static void main(String[] args)
{
Scanner scanf= new Scanner(System.in);
int m,n;
Room[] r= new Room[1100];
while(scanf.hasNextInt()){
m=scanf.nextInt();
n=scanf.nextInt();
if(m==-1||n==-1)
break;
double ans=0;
for(int i=0;i<n;i++){
int a,b;
a=scanf.nextInt();
b=scanf.nextInt();
r[i]=new Room(a,b,(double)a/(double)b);
}
Arrays.sort(r,0,n);
for(int i=0;i<n;i++){//结束条件是i<n;不要m!=0
if(m>r[i].F)
{
ans+=(double)r[i].J;
m-=r[i].F;
}
else
{
ans+=(((double)m*(double)r[i].J)/(double)r[i].F);
break;
}
}
System.out.println(String.format("%.3f",ans));
}
}
}
class Room implements Comparable
{
public int J;
public int F;
public double chu;
Room(int J,int F,double chu)
{
this.J=J;
this.F=F;
this.chu=chu;
}
public int compareTo(Object obj)//实现比较方法,让此类具有自然排序
{
Room r=(Room)obj;
if(chu>r.chu)//sort是升序,所以大于返回-1
return -1;
else if(chu<r.chu)
return 1;
else
return 0;
}
}