1 条题解
-
1
题目传送门
我们可以得出结论:在给定的示例中,最优的过河策略是:让过河时间最短的两个人(1和2)一起过河,时间为2分钟。
让过河时间最短的人(1)返回,时间为1分钟。
让过河时间最长的两个人(5和10)一起过河,时间为10分钟。
让过河时间第二短的人(2)返回,时间为2分钟。
让过河时间最短的两个人(1和2)再次一起过河,时间为2分钟。
#include<bits/stdc++.h> using namespace std; const int inff = 1e6; long long x, n, c, b[inff], t; vector<int>w, clear; int water() { int ans=0; sort(w.begin(), w.end()); ans = 0; while (n > 3) { // 策略1:最快的两个人先过河,最快的人返回,最慢的两个人过河,第二快的人返回 int way1 = w[0] + w[1] * 2 + w[n - 1]; // 策略2:最快的和最慢的两个人先过河,最快的人返回,最快的和第二慢的过河,最快的人返回 int way2 = w[0] * 2 + w[n - 1] + w[n - 2]; ans += min(way1, way2); n -= 2; w.pop_back(); w.pop_back(); } if (n == 3) { ans += w[0] + w[1] + w[2]; } else if (n == 2) { ans += w[1]; } else if (n == 1) ans += w[0]; return ans; } int main() { cin >> t; while (t--) { cin >> n; for (int i = 1; i <= n; i++) { cin >> x; w.push_back(x); } cout <<water()<< endl; w = clear; } return 0; }
信息
- ID
- 3653
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 7
- 已通过
- 1
- 上传者