ShoeMaker Prob的优化解决方案

时间:2017-08-17 19:06:44

标签: java arrays sorting

在竞争激烈的编程竞赛中,我遇到了以下被称为“鞋匠问题”的问题:

"鞋匠有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?

我的问题是,我的方法在效率方面是否失败,或者我的逻辑在大输入时失败了。

提前致谢...

0 个答案:

没有答案