找回密码
 立即注册
首页 业界区 科技 【贪心]奶牛玩杂技

【贪心]奶牛玩杂技

阕阵闲 2025-6-9 16:37:47
题目背景

Farmer John 养了 N 头牛,她们已经按 1∼N 依次编上了号。FJ 所不知道的是,他的所有牛都梦想着从农场逃走,去参加马戏团的演出。可奶牛们很快发现她们那笨拙的蹄子根本无法在钢丝或晃动的的秋千上站稳(她们还尝试过把自己装在大炮里发射出去,但可想而知,结果是悲惨的) 。最终,她们决定练习一种最简单的杂技:把所有牛都摞在一起, 比如说, 第一头牛站在第二头的身上, 同时第二头牛又站在第三头牛的身上... 最底下的是第 N 头牛。
题目描述

每头牛都有自己的体重以及力量,编号为 i 的奶牛的体重为 Wi​,力量为 Si​。
当某头牛身上站着另一些牛时它就会在一定程度上被压扁,我们不妨把它被压扁的程度叫做它的压扁指数。对于任意的牛,她的压扁指数等于摞在她上面的所有奶牛的总重(当然不包括她自己)减去它的力量。奶牛们按照一定的顺序摞在一起后, 她们的总压扁指数就是被压得最扁的那头奶牛的压扁指数。
你的任务就是帮助奶牛们找出一个摞在一起的顺序,使得总压扁指数最小。
输入格式

第一行一个整数 N。
接下来 N 行,每行两个整数 Wi​ 和 Si​。
输出格式

一行一个整数表示最小总压扁指数。
输入输出样例
  1. 3
  2. 10 3
  3. 2 5
  4. 3 3
复制代码
输出
  1. 2
复制代码
说明 / 提示

对于 100% 的数据,1≤N≤5×104,1≤Wi​≤104,1≤Si​≤10^9。
题解

这道题感觉上就是一道贪心,但是麻烦的是有两个变量需要考虑,如果单考虑一个变量的话,一定会出现矛盾,因此,考虑wi + si,不妨假设a,b奶牛之上的总重量为W,那么只需要考虑是a上b下还是,a下b上,这两种情况中最大值的最小值,
好,假设wa + sa < wb + sb,

  • a上b下
    那么\(p_a1 = w - sa\)
    \(p_b1 = w + wa - sb\)
    \(p_a1,p_b1\)大小不确定
  • 考虑a下b上
    那么\(p_a2 = w + wb- sa\)
    \(p_b2 = w - sb\)
    很明显\(p_a2\)更大,而且\(p_a2>p_a1\)和\(p_b1\)
    因此,a上b下比a下b上更好
    源码
[code]struct cow{    ll weight;    ll strength;    ll all;    cow() = default;    cow(ll a,ll b) : weight(a),strength(b),all(a+b){}};int main(){    ios::sync_with_stdio(0);    cin.tie(0);    cout.tie(0);    int n;    cin >> n;    vector p(n+1,cow{0,0});    f(i,1,n)    {        int a,b;        cin >> a >> b;        p = cow(a,b);    }    sort(p.begin() +1,p.end(),[](const cow &a,const cow& b){return a.all < b.all;});    ll sum = 0,ans = INT_MIN;    for(int i = 1;i
您需要登录后才可以回帖 登录 | 立即注册