여러 곳 에서 가장 좋 은 서비스 순서 문제 자바 코드

2561 단어 알고리즘
여러 곳 에서 가장 좋 은 서비스 순서 문제
  • 문제 설명:
  • n 개의 고객 이 동시에 서 비 스 를 기다 리 고 고객 i 에 필요 한 서비스 시간 은 t [i] 입 니 다.모두 s 곳 에서 이 서 비 스 를 제공 할 수 있다.n 개 고객 의 서비스 순 서 를 어떻게 배정 해 야 평균 대기 시간 을 최소 화 할 수 있 습 니까?평균 대기 시간 은 n 개 고객 이 서 비 스 를 기다 리 는 시간의 총 계 를 n 으로 나눈다.
  • 알고리즘 디자인:
  • 주어진 n 개 고객 이 필요 로 하 는 서비스 시간 과 s 의 값 에 대해 가장 서비스 순 서 를 계산한다.
  • 데이터 입력:
  • 파일 input. txt 에서 입력 데 이 터 를 드 립 니 다.첫 번 째 줄 에는 2 개의 정수 n 과 s 가 있 는데 n 개의 고객 이 있 고 s 곳 에서 고객 이 필요 로 하 는 서 비 스 를 제공한다.다음 줄 에는 n 개의 정수 가 있 는데 n 개의 고객 이 필요 로 하 는 서비스 시간 을 나타 낸다.
  • 결과 출력:
  • 계 산 된 최소 평균 대기 시간 을 파일 output. txt 에 출력 합 니 다.
    package TanXin;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class DuoChuZuiYouPaiXu {
    	
    	public static void main(String[] args) {
    		try {
    			BufferedReader reader = new BufferedReader(new FileReader("./input.txt"));
    			BufferedWriter writer = new BufferedWriter(new FileWriter("./output.txt"));
    
    			//        
    			String info = reader.readLine();
    			String[] infos = info.split(" ");
    			int n = Integer.parseInt(infos[0]);//    
    			int s = Integer.parseInt(infos[1]);//       
    //			System.out.println(n + " " + s);
    			info = reader.readLine();
    			//System.out.println(info);
    			infos = info.split(" ");
    			int[] time = new int[n]; //            
    			for (int i = 0; i < infos.length; i++) {
    				time[i] = Integer.parseInt(infos[i]);
    			}
    			
    			//     (       )
    			for (int i = 0; i < time.length; i++) {
    				int temp = 0;
    				for (int j = i + 1; j < time.length; j++) {
    					if (time[i] > time[j]) {
    						temp = time[i];
    						time[i] = time[j];
    						time[j] = temp;
    					}
    				}
    			}
    			
    			//     
    			int sum = 0;//              
    			sum = sum + time[0] + time[1];//               
    			int[] waitTime = new int[n];
    			waitTime[0] = time[0];
    			waitTime[1] = time[1];
    			for(int i = 2; i < n; i++) {
    				if(waitTime[i-2] < waitTime[i-1]){
    					waitTime[i] = waitTime[i-2] + time[i];
    				}else {
    					waitTime[i] = waitTime[i-1] + time[i];
    				}
    				sum = sum + waitTime[i];
    			}
    			
    			//      
    			int x = sum/n;
    			//                 string,     
    //			writer.write(x + "");
    //			writer.write(String.valueOf(x));
    			writer.write(Integer.toString(x));
    			writer.flush();
    
    
    		} catch (FileNotFoundException e) {
    			// TODO       catch  
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO       catch  
    			e.printStackTrace();
    		}
    	}
    }
    
    

    좋은 웹페이지 즐겨찾기