推公式
- 问题背景
-
策略
- 按照 wi+si 从小到大排序,最大的危险系数一定是最小的
练习
01 耍杂技的牛
- 题目
- 题解
import java.io.*;
import java.util.*;
public class Main {
public static final int N = 50010;
public static Cow[] q = new Cow[N];
//si 表示将牛牛从上到下都摆好后(最上面的i是1) 第i头牛所承受的重量
public static int[] s = new int[N];
public static int n;
public static class Cow implements Comparable<Cow> {
public int w;
public int s;
public Cow(int w, int s) {
this.w = w;
this.s = s;
}
@Override
public int compareTo(Cow o) {
return (this.w + this.s) - (o.w + o.s);
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
n = Integer.parseInt(br.readLine());
for (int i = 1; i <= n; i++) {
String[] str1 = br.readLine().split(" ");
q[i] = new Cow(Integer.parseInt(str1[0]), Integer.parseInt(str1[1]));
}
Arrays.sort(q, 1, n + 1);
for (int i = 2; i <= n; i++) {
s[i] = s[i - 1] + q[i - 1].w;
}
int res = -(int) 1e9;
for (int i = 1; i <= n; i++) {
res = Math.max(res, s[i] - q[i].s);
}
pw.println(res);
pw.close();
br.close();
}
}