乘船问题(贪心)
有n个人,第i个人重量为wi。每艘船的最大载重量均为C,且最多只能乘两个人。用最少的船装载所有人。
贪心策略:考虑最轻的人i,如果每个人都无法和他一起坐船(重量和超过C),则唯一的方案是每个人坐一艘
否则,他应该选择能和他一起坐船的人中最重的一个j
求需要船的数量
package _90贪心;
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);//需要多少船
}
}