在竞争激烈的编程竞赛中,我遇到了以下被称为“鞋匠问题”的问题:
"鞋匠有N个客户必须执行的订单。鞋匠每天只能从事一项工作。对于每个工作i,鞋匠完成工作需要Ti天,其中Ti是整数且(1≤Ti≤1000)。对于开始为工作i工作的每一天延迟,鞋匠必须支付Si(1≤si≤10000)卢比的罚款。你的任务是帮助鞋匠找到完成工作的顺序,以使他的总罚款最小化。如果可以使用多种解决方案,请按字典顺序打印一个解决方案(即最早按字典顺序排列)。"
为解决这个问题,我尝试将Si / Ti最小化,然后将它们排列在阵列中。
我在java中的解决方案如下:
import java.util.Arrays;
import java.util.Scanner;
class Order implements Comparable<Order>
{
int time;
int fine;
int index;
public static void main(String...s)
{
Scanner sc= new Scanner(System.in);
int numOfElements=sc.nextInt();
Order[] orders= new Order[numOfElements];
for(int i=0;i<numOfElements;i++)
{
Order o=new Order();
o.time=sc.nextInt();
o.fine=sc.nextInt();
o.index=i+1;
orders[i]=o;
}
Arrays.sort(orders);
for(Order o:orders)
{
System.out.println(o.index);
}
}
@Override
public int compareTo(Order o)
{
int b=this.fine*o.time;
int a =o.fine*this.time;
return a-b;
}
}
因此,在提交解决方案后,我得到了100分中的30分。
- 现在我使用已经存在的Arrays.sort(),根据以下问题,使用Mergesort对对象数组进行排序:
Why does Java's Arrays.sort method use two different sorting algorithms for different types?
我的问题是,我的方法在效率方面是否失败,或者我的逻辑在大输入时失败了。
提前致谢...