#贪心 能够发现,下面的 $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; } ``` 还有另外一种思路,那就是所有巨人都贡献了自己肩膀的高度,但是会有唯一的一个巨人不仅贡献了肩膀,还贡献了肩膀距离头部的那段距离。因此,我们也可以先将所有巨人的肩膀高度加起来,然后枚举一个最高的肩膀距离头部的那段距离。但是代码写起来是一样的,在此就不重复了。