题目描述:周日上午,SFB的舍友们又开始玩伏魔战记了,不知不觉中到了午饭时间了。但是他们却为吃饭犯愁了,因为天下着大雨,而他们只有一把伞,一把伞一次只能遮两个人。现在已知SFB的舍友每个人到食堂需要花的时间,两个人到食堂的时间以走的慢的那个人为基准,他们想知道他们到食堂的总时间最小值。
输入:输入数据的第一行是一个整数T(T<150),表示测试样例数目。随后包含T个测试样例,每个测试样例第一行包括一个整数n(1≤n≤2000),表示SFB 的舍友个数,接下一行有n个整数表示每个舍友到食堂所花费的时间,每个时间大于0小于等于10000。
输出:对每个测试样例,你应该输出一行。输出他们到食堂的总时间最小值。
样例输入:
2
3
1 2 3
4
6 7 6 5
样例输出:
6
29
问题分析:
//本题就是经典的过桥问题
//可分两种方案
//一:由耗时最少的人带其他人一一过桥 time1 = min1*2+max1+max2
//二:由耗时最少的前两个人带耗时最久的前两个人过 time2 = 2*min2+min1+max1
//使用方案二的情况需满足 time1>time2
//即:max2+min1>2*min2;
//方案二的本质就是使用耗时最少的两个人的时间替代了耗时第二大的人的时间
//故做个递归判断,依次对耗时最大的两个人进行方案选择
java实现(吐槽一下,用简书直接复制代码的时候老是出问题,所以干脆截图):
网友评论