#贪心
能够发现,下面的 $n-1$ 个巨人都被踩着肩膀,也就是贡献出肩膀的高度,只有最上面的巨人才能贡献出头的高度。因此,我们可以枚举哪一个巨人站在最上面,那么就需要计算其他巨人肩膀的高度和他自己头的高度之和。
如何计算其他巨人的肩膀高度之和呢?可以先将所有巨人的肩膀高度之和加起来,然后再减去枚举的巨人的肩膀高度,就能够得到其他巨人的肩膀之和了。
```cpp
#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;
}
```
还有另外一种思路,那就是所有巨人都贡献了自己肩膀的高度,但是会有唯一的一个巨人不仅贡献了肩膀,还贡献了肩膀距离头部的那段距离。因此,我们也可以先将所有巨人的肩膀高度加起来,然后枚举一个最高的肩膀距离头部的那段距离。但是代码写起来是一样的,在此就不重复了。