Hznu_oj 2340 你敢一个人过桥吗?
Description
在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,N人所需要的时间已知;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这N人尽快过桥。
Input
第一行是一个整数T(1<=T<=20)表示测试数据的组数
每组测试数据的第一行是一个整数N(1<=N<=1000)表示共有N个人要过桥
每组测试数据的第二行是N个整数Si,表示此人过桥所需要花时间。(0<Si<=100)
Output
For each test case, print a line containing the total number of seconds required for all the N people to cross the bridge.
Samples
input Copy
1 4 1 5 7 12
output Copy
26
解题思路:
要尽肯能快的过桥,就得让每次返回的人过桥时间最短。
首先考虑人数:当只有一人过桥时时间为他的时间,当有两人过桥时时间是较长的,当三个人过桥时时间是三个人时间相加。当人数大于3时 有两种方法可以选择:方法一是先让最快的两人过桥,然后让最快的人返回去接后面的人。方法二是先让最快的人和最慢的人过桥,然后让最快的人返回接后面的人。我们只要每次比较这两种方法的时间取较小的加入总时间中,就可以得出答案。
Ac代码
#include <bits/stdc++.h>
using namespace std;
const int inf=1e3+5;
int a[inf];
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);//排序
int sum=0;
while(n>=4){
sum+=min(2*a[2]+a[1]+a[n],a[n]+a[n-1]+2*a[1]);//取较短时间;
n-=2; //人数减二;
}
if(n==3) sum+=a[1]+a[2]+a[3]; //三种特殊情况;
else if(n==2) sum+=a[2];
else if(n==1) sum+=a[1];
cout<<sum<<endl;
}
return 0;
}
Hznu_oj 2340 你敢一个人过桥吗?的更多相关文章
- [BZOJ2072][POI2004] MOS过桥
Description 一个夜晚一些旅行者想要过桥. 他们只有一个火把. 火把的亮光最多允许两个旅行者同时过桥. 没有火把或者多于2个人则不能过桥.每个旅行者过桥都需要特定的时间, 两个旅行者同时过桥 ...
- vijos[1355]车队过桥问题
描述 现有N辆车要按顺序通过一个单向的小桥,由于小桥太窄,不能有两辆车并排通过.另外,由于小桥建造的时间已经很久,只能承受有限的重量,记为Max(吨).管理员将N辆车按初始的顺序分组,每次让一个组过桥 ...
- 杂题_POJ上的过桥问题
本文出自:http://blog.csdn.net/svitter 过桥问题解释:一条船能够坐两个人,可是有非常多人要过河,所以送过一个人去,还有一个人还要回来接.使全部人过河之后时间最短,怎样求? ...
- POJ2573 Bridge 经典的过桥问题
曾经遇到过类似的.纪念一下!这题同一时候也是 ZOJ1877.经典的过桥问题 是有个博客解说的非常好的 戳这里 挺久曾经.遇到过一个基本一样的,那个题目仅仅要求求出 最短时间就可以,如今还有过桥的过 ...
- poj2573Bridge(过桥问题)
链接 A,B为最快和次快 有两种方式可以使c,d过桥 一是a与c一起走,a回来接d再与d一起走,一直到对岸人为0为止 而是 a与b一起走 a回来送灯 c与d一起走 b回来送灯 重复此过程. 只剩2人时 ...
- 【ACM】nyoj_47_过桥问题_201308151616
过河问题时间限制:1000 ms | 内存限制:65535 KB 难度:5描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的 ...
- 解决N个人过桥时间最短问题(Java版本)
[问题描述] n个人要晚上过桥,在任何时候最多两个人一组过桥,每组要有一只手电筒.在这n个人中只有一个手电筒能用,因此要安排以某种往返的方式来返还手电筒,使更多的人可以过桥. 注意:每个人的过桥速 ...
- tc 146 2 BridgeCrossing(n人过桥问题)
SRM 146 2 1000BridgeCrossing Problem Statement A well-known riddle goes like this: Four people are c ...
- HDU 2340 Obfuscation(dp)
题意:已知原串(长度为1~1000),它由多个单词组成,每个单词除了首尾字母,其余字母为乱序,且句子中无空格.给定n个互不相同的单词(1 <= n <= 10000),问是否能用这n个单词 ...
随机推荐
- redis跳表
redis使用跳表作为有序集合的底层实现之一,下面来看下跳表的结构 一.跳表的结构
- 计蒜客 2019南昌邀请网络赛J Distance on the tree(主席树)题解
题意:给出一棵树,给出每条边的权值,现在给出m个询问,要你每次输出u~v的最短路径中,边权 <= k 的边有几条 思路:当时网络赛的时候没学过主席树,现在补上.先树上建主席树,然后把边权交给子节 ...
- SwiftUI & MVVM
SwiftUI & MVVM design paradigm / 设计模式 MVVM Model View ViewModel MVVM Architecture 架构 MVC Model V ...
- js & Event Bus
js & Event Bus global event handler (broadcast / trigger / emit / listen ) // 实现一个 EventBus类,这个类 ...
- 封装 React Native 原生组件(iOS / Android)
封装 React Native 原生组件(iOS / Android) 在 React Native中,有很多种丰富的组件了,例如 ScrollView.FlatList.SectionList.Bu ...
- NGK高效的背后驱动力是社区发展
社区是公有链生态系统中最重要的部分,如果开发了区块链应用或工具,却没有用户使用,那将毫无价值.因此对公链项目来说首先需要构建用户群,并深入研究用户群体的需求.就目前而言,任何项目都需要社区力量加入项目 ...
- 前端问题录——在导入模块时使用'@'时提示"Modile is not installed"
前情提要 为了尽可能解决引用其他模块时路径过长的问题,通常会在 vue.config.js 文件中为 src 目录配置一个别名 '@' configureWebpack: { resolve: { a ...
- 2021-2-27:Linux 下如何优化 Java MMAP 写入
主要是调整 pdflush 相关参数. 在linux操作系统中,写操作是异步的,即写操作返回的时候数据并没有真正写到磁盘上,而是先写到了系统cache里,随后由pdflush内核线程将系统中的脏页写到 ...
- Bootstrap下拉菜单、按钮式下拉菜单
1. 概述 下拉菜单使用频率也是比较高的,比较常见的使用场景是在导航菜单栏,某个主菜单含有下拉的子菜单. Bootstrap为下拉菜单提供了两种实现方式,即普通的下拉菜单还有按钮式的下拉菜单.我们先看 ...
- AOP +FreeSql 跨方法异步事务
AOP +FreeSql 跨方法异步事务 Autofac.Extensions.DependencyInjection Autofac.Extras.DynamicProxy Castle.Core. ...