NC221820. 旅行家问题2
描述
输入描述
第一行包含一个整数
接下来 行,第 行包括两个正整数 ,表示第 个山的高度,山顶梯子的长度。
输出描述
输出一个正整数,表示最小的花费。
示例1
输入:
3 1 9 2 1 4 1
输出:
11
说明:
示例2
输入:
6 4 2 8 4 3 0 2 3 7 1 0 1
输出:
13
C++ 解法, 执行用时: 79ms, 内存消耗: 1260K, 提交时间: 2021-10-07 19:26:30
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main(){ pair <int, int> a[100010]; int n; ll ans = 0; cin >> n; for (int i = 0; i < n; i++) cin>>a[i].first>>a[i].second, ans += a[i].second; sort(a, a + n); int h = a[0].first + a[0].second; for (int i = 1; i < n; i++) { if (a[i].first > h) ans += a[i].first - h; h = max(h, a[i].first + a[i].second); } printf("%lld\n", ans); return 0; }