nyoj47過河問題(貪心)

過河問題

時間限制:1000 ms  |  內存限制:65535 KB
難度:5
描述

在漆黑的夜裏,N位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,N個人一共只帶了一隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,N人所需要的時間已知;而如果兩人同時過橋,所需要的時間就是走得比較慢的那個人單獨行動時所需的時間。問題是,如何設計一個方案,讓這N人儘快過橋。 

輸入
第一行是一個整數T(1<=T<=20)表示測試數據的組數
每組測試數據的第一行是一個整數N(1<=N<=1000)表示共有N個人要過河
每組測試數據的第二行是N個整數Si,表示此人過河所需要花時間。(0<Si<=100)
輸出
輸出所有人都過河需要用的最少時間
樣例輸入
1
4
1 2 5 10
樣例輸出
17
來源
POJ
上傳者
張雲聰

 
import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		Scanner sc=new Scanner(System.in);
		int T =sc.nextInt();
		while(T-->0){
			int N =sc.nextInt();
			int a[]=new int [N];
			
			for(int i=0; i<N; i++)
				a[i]=sc.nextInt();
		    int sum=0; 
			Arrays.sort(a);
			
			if(N<=2){System.out.println(a[N-1]);continue;}
			if(N==3){System.out.println(a[0]+a[1]+a[2]);continue;}
			
			 sum =a[1];
			 
			for(int i=N-1; i>=3; i-=2){
			
				sum +=Math.min(a[0]+a[i]+a[0]+a[i-1], a[0]+a[1]+a[i]+a[1]);
				
			}if(N%2==1)sum +=a[2]+a[0];//奇數的時候,別忘了,錯了半天!!
		   
			System.out.println(sum);
		}	
	}
}
        


發佈了145 篇原創文章 · 獲贊 27 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章