标签:
http://acm.nyist.net/JudgeOnline/problem.php?pid=47
在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,N人所需要的时间已知;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这N人尽快过桥。
1
4
1 2 5 10
17
AC代码:
1 #include<cstdio>
2 #include<algorithm>
3 using namespace std;
4
5 int mintime(int n,int *a)
6 {
7 sort(a,a+n);
8 int res=0;
9 --n;
10 while(n>2)
11 {
12 res+=min(a[0]+a[1]*2+a[n],a[0]*2+a[n]+a[n-1]);
13 n-=2;
14 }
15 if(n==0)
16 res+=a[0];
17 else if(n==1)
18 res+=a[1];
19 else
20 res+=a[0]+a[1]+a[2];
21 return res;
22 }
23 int main()
24 {
25 int i,n,t,a[1001];
26 scanf("%d",&t);
27 while(t--)
28 {
29 scanf("%d",&n);
30 for(i=0;i<n;++i)
31 scanf("%d",&a[i]);
32 printf("%d\n",mintime(n,a));
33 }
34 return 0;
35 }
Java代码:
1 package wgcwgc;
2
3 import java.util.*;
4 public class Main
5 {
6
7 static Scanner cin = new Scanner(System.in);
8
9 public static void mintime(int n,int a[])
10 {
11 Arrays.sort(a , 0 , n - 1);
12 int res = 0;
13 n --;
14 while(n>2)
15 {
16 res += Math.min(a[0] + a[1] * 2 + a[n] , a[0] * 2 + a[n] + a[n-1]);
17 n -= 2;
18 }
19 if(n == 0)
20 res += a[0];
21 else if(n == 1)
22 res += a[1];
23 else
24 res += (a[0] + a[1] + a[2]);
25 System.out.println(res);
26 }
27
28 public static void main(String[] args)
29 {
30 int a[] = new int[1001];
31 int t = cin.nextInt();
32 while(t-->0)
33 {
34 int n = cin.nextInt();
35 for(int i = 0;i < n;i ++)
36 a[i] = cin.nextInt();
37 mintime(n , a);
38 }
39 }
40
41 }
Java代码在nyist 上提交WA,改成C++就对啦,,,
标签:
原文地址:http://www.cnblogs.com/jeff-wgc/p/4465442.html