N人走钢索问题踩坑
题目
为腾讯笔试题目,N人过桥问题的改进,N人走钢索,最多两人过钢索,只有一支平衡杆,问最少需要多少时间全部过桥。
输入:
2
3
3 6 9
4
10 1 5 2
含义:有两组人,一组三人,一组四人,组内每人通过时间为下一列数组表示
返回值:
18 (6+3+9)
17 (2+1+10+2+2)
贪心策略
最快的(即所用时间t[0])和次快的过桥,然后最快的回来,再次慢的和最慢的过桥,然后次快的回来。
即所需时间为:t[0]+2*t[1]+t[n-1]
最快的和最慢的过桥,然后最快的回来,再最快的和次慢的过桥,然后最快的回来。
即所需时间为:2*t[0]+t[n-2]+t[n-1]
比较两种情况进行贪心。
import java.util.Arrays;
import java.util.Scanner;
/**
* @author liujinbo
* @create 2021-04-04 20:44
*/
public class test2 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int x =sc.nextInt();
int[] n1 = new int[x];
while(sc.hasNext()){
int n = sc.nextInt();
int[] num = new int[n+1];
for (int i = 1; i <=n; i++) {
num[i] = sc.nextInt();
}
Arrays.sort(num);
int res =0;
int flag = n;
while(flag>3){
if(num[1]+num[flag-1]>2*num[2]){
res+=2*num[2]+num[flag]+num[1];
}else{
res+=2*num[1]+num[flag]+num[flag-1];
}
flag-=2;
}
if(flag==3){
res +=(num[1]+num[2]+num[3]);
}else{
res+=(num[2]);
}
System.out.println(res);
}
}
}
本博客所有文章除特别声明外,大部分为学习心得,欢迎与博主联系讨论