乘船问题

题目:
有n个人,第i个人的重量为wi,每艘船的最大载重量均为c,且最多只能乘两个人,用最少的船装载所有人。
思路:
贪心策略:考虑最轻的人i如果每个人都无法和他坐船(重量和超过c),则唯一的方案是每个人坐一艘,否则,他应该选择能和他坐船的人中最重的一个。

import java.util.Arrays;

public class 乘船问题 {
	public static void main(String[] args) {
		int[] w= {1,2,3,4,5,6,7,8,9,10};
		int n=w.length;
		int c=10;
		
		Arrays.sort(w);
		int cntOfPerson=n;
		int cntOfBoat=0;
		int p1=0;
		int p2=n-1;
		while (cntOfPerson>0) {
			if(p1+p2>c) {
				p2--;
				cntOfPerson--;
				cntOfBoat++;
			}else {
				p1++;
				p2--;
				cntOfPerson-=2;
				cntOfBoat++;
			}
		}
		System.out.println(cntOfBoat);
	}
}

你可能感兴趣的:(动态规划和贪心)