蓝桥杯真题【答疑】

蓝桥杯真题【答疑】

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改



public class Main {
    public static void main(String[] args) {
      /*
      思路:
      本题的目的是所有同学的s+a总时刻之和最少,但这里需注意的是,每个同学只有在前一个同学的s+a+e这一个
      流程都做完后,才能接着自己的流程。所有同学的s+a总时刻之和最少,注意是时刻,不是每个人单独走完自己
      s+a这个过程的时间,时刻在这里可以理解为每个同学到能够发消息前的等待时间,所以是所有同学轮到自己能够
      发消息的等待时间之和,每个同学自己的等待之间s+a叠加了前面同学过完一遍问问题流程s+a+e的时间,
      所以利用贪心算法的优先选择原理:
      1、优先选择s+a+e的同学用时最短的排到前面;
      2、如果两个同学s+a+e相同,那么比较s+a,把s+a短的放前边;
      3、排完序后计算每个同学的等待发送消息时刻,注意是叠加了前面同学完整问问题的时间,
      即T(i)=s(i)+a(i)+(T(i-1)+e(i-1)) T(1)=s(1)+s(1);
      4、所有同学总的等待时刻之和为sum(T(i));

      可以参考:
      https://blog.csdn.net/bdu_zhangAo/article/details/109714422

      import java.util.*;
      public class Main{
          public static void main(String[] args) {
              Scanner scan = new Scanner(System.in);
              int n = scan.nextInt();
              People[] people = new People[n];
              for (int i=0;i() {
                  @Override
                  public int compare(People o1, People o2) {
                      if(o1.sum-o2.sum>0){
                        return 1;
                      }else if(o1.sum-o2.sum<0){
                        return -1;
                      }else if(o1.two>=o2.two){
                        return 1;
                      }else{
                        return -1;
                      }
                  }
              });
              long ans = 0,last=0,time=0;
              for (int i=0;i
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        scan.close();
    }
}

你可能感兴趣的:(蓝桥杯刷题,蓝桥杯,java,职场和发展)