本帖最后由 jixch 于 2012-3-31 09:15 编辑
写了个M个人最多N个人同时过桥的判断逻辑.3个多小时的成果啊....,如下:
M个人,每次最多N个人过桥
过桥的时间从小到大依次为 T1、T2、T3、T4、T5、……、Tm
第一次过桥判断: 判断M - N是否小于N-1 M - N < N - 1 第一次过河:过桥时间最小的 M – N + 1 个人过河 时间为TM-N+1 返回:河对面(已经过河的)的 过桥时间最短的返回 时间为 T1 第二次过河:(剩下人数为: M-(M–N+1)+1 = N)没过河的N个人一次过河 时间为Tm ------结束 M – N >= N - 1 第一次过河:过桥时间最小的N个人过河 时间为 Tn 返回:河对面(已经过河的)的 过桥时间最短的返回 T1 第二次过河:过桥时间最大的N个人过河 时间为 Tm 返回:河对面(已经过河的)的 过桥时间最短的返回 T2 第三次过河判断:(设此时还没过河的人数为M1 = M-2N+2) 判断 M1 - N 与 N - 1 的大小关系 M1 – N < N - 1 第三次过河:M1人中的最小的M1 – N + 1人过河 返回:河对面(已经过河的)的 过桥时间最短的返回 时间为T1 第四次过河:剩余人数为:M1-(M1-N+1)+1 = N,没过河的一起过河 时间为Tm ------------结束 M1-N = N-1 设剩下的人的过河时间从小到大依次为T1、T2、……Tn-1、Tn、……、Tm1 此时河对面的(已经过河的)人群中过桥时间最短的返回 时间为T3 判断Tn + T1 + Tm1 与 Tm1 + T3 + max(Tn-1,T3) 的大小关系 Tn + T1 + Tm1 >= Tm1 + T3 + max(Tn-1,T3) 第三次过河:M1个人中时间最大的N个人(Tn、……、Tm1)过河 返回:河对面(已经过河的)的 过桥时间最短的返回 时间为T3 第四次过河:剩余人数为:M1–N+1 = N,没过河的一起过河 ------------结束 Tn + T1 + Tm1 < Tm1 + T3 + max(Tn-1,T3) 第三次过河:M1个人中时间最小的N个人(T1、……、Tn)过河 返回:河对面(已经过河的)的 过桥时间最短的返回 时间为T3 第四次过河:剩余人数为:M1–N+1 = N,没过河的一起过河 ------------结束 M1-N > N-1 第三次过河:M1个人中时间最小的N个人过河 返回:河对面(已经过河的)的 过桥时间最短的返回 时间为T1 第四次过河:没有过河的剩下人中过桥时间最大的N个人过河 时间为 Tm1 返回:河对面(已经过河的)的 过桥时间最短的返回 后面 重新执行第三次过河和第四次过河
|