有十名员工,先输入十名员工的成绩,每名员工只能看到前后俩名员工的成绩,每人初始奖金1万,每名员工所获奖金必须比低于他成绩的前后员工的奖金高。最少需要多少钱。
1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.Scanner; 4 5 class Test { 6 // 奖金 7 static ArrayList<node> ff(ArrayList<node> a1) { 8 ArrayList<node> a=(ArrayList<node>)a1.clone(); 9 Collections.sort(a); 10 for (node n : a) { 11 if (n.right == null) { 12 if (n.left != null) { 13 if (n.left.num < n.num) { 14 n.many = n.left.many + 1; 15 } else if (n.left.num == n.num) { 16 n.many = n.left.many; 17 } 18 } 19 } else { 20 if (n.left != null) { 21 if (n.num > n.left.num) { 22 n.many = n.left.many + 1; 23 } 24 if (n.left.num == n.num) { 25 n.many = n.left.many; 26 } 27 if (n.right.num == n.num) { 28 n.many = n.right.many; 29 } 30 if (n.num > n.right.num) { 31 n.many = n.right.many + 1; 32 } 33 if (n.num > n.left.num && n.num > n.right.num) { 34 int m = (n.left.num > n.right.num) ? n.left.many 35 : n.right.many; 36 n.many = m + 1; 37 } 38 } else { 39 if (n.num > n.right.num) { 40 n.many = n.right.many + 1; 41 } 42 if (n.right.num == n.num) { 43 n.many = n.right.many; 44 } 45 } 46 } 47 48 } 49 return a; 50 } 51 52 public static void main(String[] args) { 53 Scanner in = new Scanner(System.in); 54 ArrayList<node> a = new ArrayList<node>(); 55 node n1 = null; 56 while (in.hasNext()) { 57 int sum = 0; 58 node n0 = new node(); 59 n0.num = in.nextInt(); 60 in.nextLine(); 61 if (n1 != null) { 62 n0.left = n1; 63 } 64 n1 = n0; 65 a.add(n0); 66 if (a.size() >= 2) { 67 a.get(a.size() - 2).right = n0; 68 } 69 for (node node : a) { 70 node.many = 1; 71 } 72 ArrayList<node>a1 = ff(a); 73 for (node node : a1) { 74 sum += node.many; 75 } 76 System.out.println(sum); 77 } 78 } 79 } 80 81 class node implements Comparable<node> { 82 int num = 0; 83 node left = null; 84 node right = null; 85 int many = 1; 86 87 @Override 88 public int compareTo(node o) { 89 // TODO Auto-generated method stub 90 if (this.num > o.num) { 91 return 1; 92 } else if (this.num == o.num) { 93 return 0; 94 } 95 return -1; 96 } 97 }
时间: 2024-10-12 18:17:24