题解
过河问题
1 条题解
-
0
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; // 读取每组数据中的人数 int a[n]; for (int i = 0; i < n; i++) { cin >> a[i]; // 读取每个人的过河时间 } sort(a, a + n); // 将过河时间进行升序排序 int z = 0; // 初始化总时间 if (n == 1) { z = a[0]; // 如果只有一个人,直接是该人的过河时间 } else if (n == 2) { z = a[1]; // 如果有两个人,总时间是两人中较大的时间 } else { int k = n - 1; // 从最后一个人开始处理 while (k >= 3) { // 计算两种策略的时间 int a1 = a[0] + a[0] + a[k] + a[k - 1]; // 第一种策略 int a2 = a[1] + a[0] + a[k] + a[1]; // 第二种策略 z += min(a1, a2); // 选择时间最少的策略 k -= 2; // 每次处理两个人,更新剩下的人员 } if (k == 2) { // 处理剩下的三个人 z += a[2] + a[1] + a[0]; } else if (k == 1) { // 处理剩下的两个人 z += a[1]; } } cout << z << endl; // 输出每组数据的最小时间 }
- 1