当前位置: 首页 > news >正文

题解:学而思编程 奶牛杂技团

【题目来源】

学而思编程:奶牛杂技团

【题目描述】

农夫约翰有 \(N\) 头奶牛,编号从 \(1\)\(N\),打算进行叠罗汉的杂技表演。

进行叠罗汉表演时,奶牛站在彼此的身上,形成一个有一定高度的垂直堆叠。

奶牛们正在试图弄清楚它们在这个堆叠中的位置顺序。

奶牛们有自己的重量 \(W_i\) 和力量 \(S_i\),一头奶牛倒下的风险等于它身上所有奶牛(不包括它自己)的重量和减去它的力量。

你的任务是确定奶牛的顺序,使奶牛的风险值中的最大值尽可能小。

【输入】

第一行包括一个整数 \(N\),表示奶牛的数量,其中 \(1≤N≤50000\)

接下来 \(N\) 行,每行两个整数,表示奶牛的重量 \(W_i\) 和力量 \(S_i\),其中 \(1≤W_i≤10000\) \(1≤S_i≤10^9\)

【输出】

输出一个整数,表示最大风险值的最小可能值

【输入样例】

3
10 3
2 5
3 3

【输出样例】

2

【核心思想】

  1. 问题分析:给定 \(N\) 头奶牛,每头奶牛有重量 \(W_i\) 和力量 \(S_i\)。需要将奶牛叠起来,每头奶牛的风险值等于它上面所有奶牛的重量和减去它的力量。求一种叠放顺序,使得所有奶牛中的最大风险值尽可能小。这是一个自定义排序贪心问题,关键在于找到最优的排序规则。

  2. 算法选择

    • 风险值分析:对于第 \(i\) 头奶牛(从下往上数),风险值为 \(\sum_{j=1}^{i-1} W_j - S_i\)
    • 排序规则推导:考虑相邻两头奶牛 \(i\)\(i+1\),交换它们的位置后比较风险值,可以推导出最优排序应按 \(W_i + S_i\) 从小到大排序
    • 贪心正确性:按 \(W + S\) 排序可以确保承受能力强(\(S\) 大)且重量轻(\(W\) 小)的奶牛放在下面,从而最小化每头奶牛的风险值
  3. 关键步骤

    • 读取输入\(N\)(奶牛数量)、每头奶牛的 \(W_i\)\(S_i\)
    • 自定义排序:按 \(W_i + S_i\) 从小到大排序
    • 遍历计算风险值(遍历 \(i\)\(1\)\(N\)):
      • 计算当前风险值risk = tot - a[i].s(上面所有牛的重量 - 当前牛的力量)
      • 更新最大风险值ans = max(ans, risk)
      • 累加重量tot += a[i].w
    • 输出结果:最小化的最大风险值 \(ans\)
  4. 时间/空间复杂度

    • 时间复杂度:\(O(N \log N)\),主要是排序复杂度
    • 空间复杂度:\(O(N)\),存储奶牛信息
  5. 自定义排序贪心的核心思想

    • 问题建模:将叠放顺序问题转化为排序问题,通过分析相邻元素交换的影响推导排序规则
    • 交换论证:考虑相邻两头奶牛交换位置后的风险值变化,推导出最优排序条件
    • 排序规则:按 \(W + S\) 排序,让承受能力强且重量轻的奶牛优先放在下面
    • 线性扫描:排序后只需一次线性扫描即可计算最大风险值
    • 适用于顺序优化、调度问题、最小化最大值类问题

【算法标签】

贪心

【代码详解】

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int n, ans = -1e9, tot;  // ans: 最大风险值, tot: 累计总重量
struct node
{int w, s;  // w: 牛的重量, s: 牛的强壮程度
} a[50005];// 排序规则:按w+s从小到大排序
bool cmp(node x, node y)
{return x.w + x.s < y.w + y.s;
}int main()
{cin >> n;for (int i = 1; i <= n; i++){cin >> a[i].w >> a[i].s;}sort(a + 1, a + n + 1, cmp);for (int i = 1; i <= n; i++){// 当前牛的风险值 = 它上面所有牛的重量 - 它的强壮程度ans = max(ans, tot - a[i].s);tot += a[i].w;  // 累计总重量}cout << ans;return 0;
}

【运行结果】

3
10 3
2 5
3 3
http://www.jsqmd.com/news/1011356/

相关文章:

  • N皇后遗传算法实战:Python工程化实现与调参精髓
  • 2026南京市百达翡丽+宝珀手表专业回收,26年精选回收店铺排行榜推荐 - 奢金汇
  • 题解:AtCoder AT_awc0082_b Maximizing the Partition Score of a Lamp Sequence
  • 2026南宁本地水质检测饮用水检测哪家强?TOP 正规机构榜单 + 联系方式 - 中安检测集团
  • PyTorch张量形状错误根因与实战调试指南
  • 2026吉林本地水质检测饮用水检测哪家强?TOP 正规机构榜单 + 联系方式 - 中安检测集团
  • 2026揭阳本地水质检测饮用水检测哪家强?TOP 正规机构榜单 + 联系方式 - 中安检测集团
  • 2026喀什本地水质检测饮用水检测哪家强?TOP 正规机构榜单 + 联系方式 - 中安检测集团
  • AMD Ryzen处理器调校终极指南:5步解锁隐藏性能的免费工具
  • 110、3A 端到端调试:从 ISP register dump 到主观画质的完整调试流程
  • AI教材生成新突破!低查重工具助力,高效完成教材编写!
  • 2026贵阳厂区电能质量测试评估放心机构 TOP + 实地测评 + 详细地址电话 - 中检检测集团
  • 2026潜江市迪奥+古驰+普拉达包包专业回收,2026甄选回收店铺排行榜推荐 - 奢金汇
  • 2026吕梁厂区电能质量测试评估放心机构 TOP + 实地测评 + 详细地址电话 - 中检检测集团
  • 2026日喀则市爱马仕+香奈儿+路易威登LV包包专业回收,2026甄选回收店铺排行榜推荐 - 奢金汇
  • 2026 合肥奢侈品回收避坑:鉴定不透明、隐形手续费、交易无售后 - 讯息早知道
  • Hitboxer技术解析:构建跨平台SOCD键盘重映射系统的架构设计与实现原理
  • 题解:AtCoder AT_awc0082_d Corridor Doors and Hit Points
  • 数据科学转行真实路径图:3条可落地的实战路线
  • 为你的STM32小屏幕找个GUI:在1.8寸TFT上移植LVGL或U8g2的实战记录
  • 2026年安徽省中考落榜怎么办?还可以上公办大专吗?在哪报名?官网最新发布 - 小张zc
  • 揭秘 Intel 8087 浮点芯片加法器:69 位运算提速 100 倍,性能优化有何奥秘?
  • 2026年北京市CPPM和SCMP课程咨询入口:众智商学院官网、400电话和冯老师 - 众智商学院官方
  • Recommended Articles推荐系统实战:语义+行为双驱动轻量架构
  • 遗传算法工程落地指南:从理论到可运行代码的实战降维
  • 抑郁症状动态建模:基于Reddit行为-语言耦合的临床级NLP分析
  • 基于PLC的智能照明控制系统设计4123(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 2026吉安厂区电能质量测试评估放心机构 TOP + 实地测评 + 详细地址电话 - 中检检测集团
  • AI工程师必读的10篇底层论文:从Transformer到RAG的工程穿透力地图
  • 2026揭阳厂区电能质量测试评估放心机构 TOP + 实地测评 + 详细地址电话 - 中检检测集团