ny过河问题
过河问题
时间限制: 1000 ms | 内存限制: 65535 KB 难度: 5- 描述
-
在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,N人所需要的时间已知;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这N人尽快过桥。
- 输入
- 第一行是一个整数T(1<=T<=20)表示测试数据的组数
每组测试数据的第一行是一个整数N(1<=N<=1000)表示共有N个人要过河
每组测试数据的第二行是N个整数Si,表示此人过河所需要花时间。(0输出 - 输出所有人都过河需要用的最少时间
样例输入 样例输出1 4 1 2 5 10
来源17
- POJ
上传者张云聪
解题思路:
现在假设n个人的过河时间已经从小到大排好序用数列 a1 ,a2 ,a3 ,a4 ,... , an ;
当(n <= 2) ans = a[n] ;
当(n > 2) 时:
(1) n 是偶数
a3 ,a4 怎么过
肯定是a1 , a2 先过去再a1回来。
(a)a1和a3 一起过,再a1回来和a4一起过 。
总时间 time1 = a1 + a3 + a1 + a4 ;
(b)a3和a4一起过再a2回来和a1一起过。
总时间 time2 =a1 + a4 + a2 + a2 ;
time = min(time1 , time2) ;
(2) n 是奇数两两一起过会有一个人打单。
现在的问题是a3打单还是an。
现在假设 n = 5 .
a5打单 time1 = min((a1 + a4 + a2 + a2 ) ,(a1 + a3 + a1 + a4) ) + a1 + a5
a3打单 time2 = min((a1 + a5 + a2 + a2 ) , (a1 + a4 + a1 + a5)) + a1 + a3 ;
比较time1 和 time2
当 time1 = a1 + a1 + a2 + a2 + a4 + a5 ;
teim2 = a1 + a1 + a2 + a2 + a3 + a5 ;
所以a3打单好。
得出要从后面开始 。
01.import java.util.Arrays;02.import java.util.Scanner;03.04.publicclassMain {
- 第一行是一个整数T(1<=T<=20)表示测试数据的组数
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
