zmer

趣味程序设计_过桥问题

霸气de小男生 提交于 2020-03-01 12:21:19
题目描述 过桥问题。有N(N≥2)个人在晚上需要从X地到达Y地,中间要过一座桥,过桥需要手电筒(而他们只有1个手电筒),每次最多两个人一起过桥(否则桥会垮)。N个人的过桥时间依次存入数组t[N]中,分别为:t[0], t[1], ……, t[N-1]。过桥的速度以慢的人为准!注意:手电筒不能丢过桥!问题是:编程求这N个人过桥所花的最短时间。 输入 有多组测试数据,每组数据先输入一个人数N,然后输入这N个人过桥所花的时间。 输出 输出对应的最短时间。 样例输入 4 1 2 5 10 4 5 2 10 1 样例输出 17 17 提示 4人过桥问题最佳方案构造法:以下是构造N个人(N≥1)过桥最佳方案的方法: 1、如果N=1、2,所有人直接过桥。 2、如果N=3,由最快的人往返一次把其他两人送过河(本次过去3个人)。 3、如果N≥4,设ZKer、CKer为走得最快和次快的旅行者,过桥所需时间分别为Tzk、Tck;而ZMer、CMer为走得最慢和次慢的旅行者,过桥所需时间分别为Tzm、Tcm。那么 a)当2 Tck>=Tzk+Tcm时,使用模式一将ZMer和CMer送过桥;(模式一:ZKer、ZMer过去,ZKer返回送手电,再ZKer、CMer过去,ZKer返回送手电,即总是由最快的把2个最慢的送过桥。本模式实际将2个最慢的人送过桥,用时Tzm+Tzk+Tcm+Tzk); b) 当2