乘船问题(贪心)

乘船问题(贪心)

有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);//需要多少船
}
}

猜你喜欢

转载自blog.csdn.net/weixin_45952706/article/details/107922550