贪心 - 推公式

119 阅读1分钟

推公式

  • 问题背景

Snipaste_2023-04-06_20-40-28.png

  • 策略

    • 按照 wi+si 从小到大排序,最大的危险系数一定是最小的

练习

01 耍杂技的牛

  • 题目

Snipaste_2023-04-06_21-07-41.png

  • 题解
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();
    }
}