贪心

能够发现,下面的 个巨人都被踩着肩膀,也就是贡献出肩膀的高度,只有最上面的巨人才能贡献出头的高度。因此,我们可以枚举哪一个巨人站在最上面,那么就需要计算其他巨人肩膀的高度和他自己头的高度之和。

如何计算其他巨人的肩膀高度之和呢?可以先将所有巨人的肩膀高度之和加起来,然后再减去枚举的巨人的肩膀高度,就能够得到其他巨人的肩膀之和了。

#include <iostream>
 
using namespace std;
 
const int kMaxN = 2e5 + 5;
 
long long a[kMaxN], b[kMaxN], n, sum, ans;
 
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i] >> b[i];
    sum += a[i];
  }
  for (int i = 1; i <= n; i++) {
    ans = max(ans, sum - a[i] + b[i]);
  }
  cout << ans << '\n';
  return 0;
}

还有另外一种思路,那就是所有巨人都贡献了自己肩膀的高度,但是会有唯一的一个巨人不仅贡献了肩膀,还贡献了肩膀距离头部的那段距离。因此,我们也可以先将所有巨人的肩膀高度加起来,然后枚举一个最高的肩膀距离头部的那段距离。但是代码写起来是一样的,在此就不重复了。