题目描述 有 n 位同学同时找老师答疑。每位同学都预先估计了自己答疑的时间。
老师可以安排答疑的顺序,同学们要依次进入老师办公室答疑。 一位同学答疑的过程如下:
首先进入办公室,编号为 i 的同学需要 si 毫秒的时间。 然后同学问问题老师解答,编号为 i 的同学需要 ai 毫秒的时间。 答疑完成后,同学很高兴,会在课程群里面发一条消息,需要的时间可以忽略。 最后同学收拾东西离开办公室,需要 ei 毫秒的时间。一般需要 10 秒、20 秒或 30 秒,即 ei 取值为 10000,20000 或 30000。 一位同学离开办公室后,紧接着下一位同学就可以进入办公室了。
答疑从 0 时刻开始(划重点)。老师想合理的安排答疑的顺序,使得同学们在课程群里面发消息的时刻之和最小。
import java.util.Arrays;
import java.util.Scanner;


//n si qi ei
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n =sc.nextInt();
User[] user = new User[n];
for(int i = 0;i < n;i++) {
int a = sc.nextInt();
int a1 = sc.nextInt();
int a2 = sc.nextInt();
user[i] = new User(a+a1,a2,a1+a+a2);
}
Arrays.sort(user);
long ans=0,m=0;
for(int i=0;i<n;i++) {
ans+=m+=user[i].ab;
m+=user[i].c;
}
System.out.println(ans);
}
static class User implements Comparable<User>{
int ab;
int c;
int sum;
public int getAb() {
return ab;
}
public void setAb(int ab) {
this.ab = ab;
}
public int getC() {
return c;
}
public void setC(int c) {
this.c = c;
}
public int getSum() {
return sum;
}
public void setSum(int sum) {
this.sum = sum;
}
public User() {
}
public User(int ab, int c, int sum) {
super();
this.ab = ab;
this.c = c;
this.sum = sum;
}
@Override
public int compareTo(User o) {
// TODO Auto-generated method stub
return this.sum - o.sum;
}
}
}