1 条题解
-
0
自动搬运
来自洛谷,原作者为

kkxacj
Full of Hope.搬运于
2025-08-24 22:15:35,当前版本为作者最后更新于2022-11-30 15:55:30,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
P5914 题目传送门
题意
一些旅行者想要过桥,他们只有一个火把。
火把的亮光最多允许两个旅行者同时过桥。
没有火把或者多于 个人则不能过桥。
每个旅行者过桥都需要特定的时间,两个旅行者同时过桥时时间应该算较慢的那个。
所有旅行者最少要花费多少时间才能全部过桥?
思路
思考一下可以发现,这道题可以模拟,一共有两种过桥方案:
-
最快的人 拿着火把接最慢的人 ,一个来回需要花 秒。
-
最快的人 把火把给最慢和次慢的人 和 ,再让第二块的人去接最快的,一个来回需要花 秒。
注意:
-
在 时,第一个和第二个必须是一起走,要在后面再算!
-
可能为 ,要特判!
-
对于 的数据,,过桥时间均不超过 。要开 long long!
做完这题可以去做做 P1809code
#include<bits/stdc++.h> using namespace std; long long n,a[1000005],sum; //数组开大点 int main() { scanf("%lld",&n); //cin >> n for(int i = 1;i <= n;i++) scanf("%lld",&a[i]); //cin >> a[i] sort(a + 1,a + n + 1); if(n <= 2) //特判 { cout << a[n]; return 0; } while(n > 3) { sum += min(a[1] * 2 + a[n] + a[n - 1],a[1] + a[2] * 2 + a[n]); n -= 2; } if(n % 2 == 0) sum += a[2]; else sum += a[1] + a[2] + a[n]; printf("%lld",sum); return 0; } -
- 1
信息
- ID
- 4929
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者