AOJ0260 Salary for a Plumber

問題リンク Salary for a Plumber

  • 解法

ジョイントを1つ使うと、使ったジョイントの長さだけパイプの長さの総和が伸び、パイプの本数が1つ減ります。残ってるジョイントの内、最も長いものを使えば、N-1本における給料が最大になります。ジョイントを使って繋げる2本のパイプは何だって構いません。

  • ソース
import java.util.Arrays;
import java.util.Scanner;

//Salary for a Plumber
public class AOJ0260 {

	void run(){
		Scanner sc = new Scanner(System.in);
		for(;;){
			int n = sc.nextInt();
			if(n==0)break;
			int[] q = new int[n-1];
			long sum = 0;
			for(int i=0;i<n;i++)sum+=sc.nextInt();
			for(int i=0;i<n-1;i++)q[i]=sc.nextInt();
			Arrays.sort(q);
			long res = sum*n;
			for(int i=n-2;i>=0;i--){
				sum+=q[i];
				res = Math.max(res, sum*(i+1));
			}
			System.out.println(res);
		}
	}
	
	void debug(Object...o){
		System.out.println(Arrays.deepToString(o));
	}
	
	public static void main(String[] args) {
		new AOJ0260().run();
	}
}