问题 大致是这样的:
在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,四人所需要的时间分别是1、2、5、8分钟;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这四人尽快过桥。
- 计算代码:
int i = [self travelBridge:@[@(1),@(2),@(5),@(8)];
//此过程可以计算 N人的过程
-(int)travelBridge:(NSArray <NSNumber *>*)times {
//首先我们认为 数组中 数字 是被 按顺序排序
NSMutableArray *mArray = [times mutableCopy];
NSInteger length = times.count;
if (length <= 2) {
return [mArray[length -1] intValue];
}else if (length == 3){
return [mArray[0] intValue] + [mArray[1] intValue] + [mArray[2] intValue];
}else{
int totaltime = 0;
int a = [mArray[0] intValue];
int b = [mArray[1] intValue];
int z = [mArray[length -1] intValue];
int y = [mArray[length - 2] intValue];
if (b*2 < a + y) {
[mArray removeLastObject];
[mArray removeLastObject];
totaltime += b + a + z + b + [self travelBridge:mArray];
}else{
[mArray removeLastObject];
totaltime += z + a + [self travelBridge:mArray];
}
return totaltime;
}
}
- 计算结果是: 15
- 1 和 2 -> 1回 3 分
- 5 和 8 -> 2 回 10 分
- 1 和 2 -> 结束 2 分
- 3 + 10 + 2 = 15 分