bakul

【贪心]奶牛玩杂技

题目背景


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

题目描述

每头牛都有自己的体重以及力量,编号为 i 的奶牛的体重为 Wi​,力量为 Si​。

当某头牛身上站着另一些牛时它就会在一定程度上被压扁,我们不妨把它被压扁的程度叫做它的压扁指数。对于任意的牛,她的压扁指数等于摞在她上面的所有奶牛的总重(当然不包括她自己)减去它的力量。奶牛们按照一定的顺序摞在一起后, 她们的总压扁指数就是被压得最扁的那头奶牛的压扁指数。

你的任务就是帮助奶牛们找出一个摞在一起的顺序,使得总压扁指数最小。

输入格式


第一行一个整数 N。

接下来 N 行,每行两个整数 Wi​ 和 Si​。

输出格式


一行一个整数表示最小总压扁指数。

输入输出样例

3
10 3
2 5
3 3

输出

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,

  1. a上b下
    那么pa1=wsa
    pb1=w+wasb
    pa1,pb1大小不确定
  2. 考虑a下b上
    那么pa2=w+wbsa
    pb2=wsb
    很明显pa2更大,而且pa2>pa1pb1
    因此,a上b下比a下b上更好
    源码


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<cow> p(n+1,cow{0,0});
    f(i,1,n)
    {
        int a,b;
        cin >> a >> b;
        p[i] = 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 <= n;++i)
    {
        sum += p[i - 1].weight;//de2(i,sum);
        ans = max(ans,  sum-p[i].strength );
    }
    cout << ans;

posted on   bakul  阅读(8)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek-R1本地部署如何选择适合你的版本?看这里
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 普通人也能轻松掌握的20个DeepSeek高频提示词(2025版)
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示