最短过桥时间

       原是4人过桥,ABCD要单独过桥分别需要用时1分、2分、5分、10分,过桥需要灯(只有一盏),一次只能2人一起过(意味着需要有人送灯回来),过桥时间已用时多的人为准,你如何设计一个方案,让用的时间最少。

      问题分析:A和B先过,A回来,CD再过,B回来,AB第二次过。17秒完成!

                             用C语言拓展成n人过桥,过桥时间自定,求过桥最短用时的方案。

先解决最少时间过桥的问题。好好理解贪心法:

1)当人数<3时,直接过

2)当人数=3时,我们假设过河时间是从小到大的a,b,c (后期排列的问题易解决),显然用最小的来送灯(c+a+b<c+b+b)

3)当人数=4时,a,b,c,d(同样是升序)

Ⅰ如果用最小的来送(配合最大的过去,a回来,再陪次大的过去,回来):d+a+c+a+b=d+c+b+2a

Ⅱ如果先让最小的两个过桥,再让其中一个回来,让最大的两个过桥,再让之前留下来的那个回来,再让最小的2个过桥:b+a+d+b+b=d+3b+a

当d+c+b+2a<d+3b+a,即c-2b+a<=0时,用第一种方法,否则用第二种方法

4)当人数>4时,a,b....c,d(升序),如果让最小的来送,d+a+c+a=d+c+2a,如果先让两个最小的过桥b+b+a+d=d+2b+a.那么c-2b+a<=0时,用第一种方法。

对输入的数据可以用快速排序来排下序(关于qsort的使用,可以参见《使用VC库函数中的快速排序函数》)。

#include<stdio.h>
#define MAX 100
int CrossBridge( int a[], int n)
{
     int time ;
     if (n==1)
     {
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值