这道题有几个点需要注意:
1.除了月饼总类和市场总需求量题目指明是正整数以外,剩下的题目都说的是正数,所以需要在定义月饼类的私有变量的时候设置位为double
2.因为这道题的月饼总类在不超过1000的范围内,所以不适合使用Scanner,应该使用bufferedReader;并且对于定义的月饼类可以让它实现comparable的接口,这样就可以使用java的list集合自带的排序,这一条主要是为了解决运行超时的问题

下面是这道题的java代码答案:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main{
  public static void main(String[] args) throws IOException{
	  BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
	  String[] values=new String[2];
	  values=bufferedReader.readLine().split(" ");
	  int times=Integer.parseInt(values[0]);//月饼种类
	  int demands=Integer.parseInt(values[1]);//市场总需求量
	  if (times <= 0 || times > 1000 || demands <= 0 || demands > 500)
          return;
	  double maxProfit=0;//最大利润
	  List<MoonCake> moonCakes=new ArrayList<MoonCake>();
	  String[] inventories=new String[times];//月饼库存集合
	  String[] totalPrices=new String[times];//月饼总价
	  inventories=bufferedReader.readLine().split(" ");
	  totalPrices=bufferedReader.readLine().split(" ");
	  bufferedReader.close();
//	  对月饼库存量赋值
	  for(int i=0;i<times;i++) {
		  MoonCake moonCake=new MoonCake();
		  moonCake.setInventory(Double.parseDouble(inventories[i]));
		  moonCake.setTotalPrice(Double.parseDouble(totalPrices[i]));
		  moonCake.setPrice();
		  moonCakes.add(moonCake);
	  }
//	  对月饼数组排序
	  Collections.sort(moonCakes);
//	  按照单价从高到低对市场需求量分配月饼
	  for(int i=0;i<times;i++) {
		  if(demands-moonCakes.get(i).getInventory()>=0) {
			  maxProfit+=moonCakes.get(i).getTotalPrice();
			  demands-=moonCakes.get(i).getInventory();
		  }else {
			  maxProfit+=moonCakes.get(i).getPrice()*demands;
			  break;
		  }
	  }
	  System.out.format("%.2f",maxProfit);
  }
}

class MoonCake implements Comparable<MoonCake>{
	private double inventory;//库存
	private double totalPrice;//总售价
	private double price;//单价
	public double getInventory() {
		return inventory;
	}
	public void setInventory(double inventory) {
		this.inventory = inventory;
	}
	public double getTotalPrice() {
		return totalPrice;
	}
	public void setTotalPrice(double totalPrice) {
		this.totalPrice = totalPrice;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public void setPrice() {
		this.price = this.totalPrice/this.inventory;
	}
	@Override
	public int compareTo(MoonCake mooncake) {
		if(mooncake.price>this.price) {
			return 1;
		}else if(mooncake.price==this.price) {
			return 0;
		}else {
			return -1;
		}
	}
}