ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

8.9乘船问题

2020-04-27 11:52:48  阅读:469  来源: 互联网

标签:p2 cntOfBoat 指向 8.9 ++ 问题 int cntOfPerson 乘船


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

求需要船的数量
 */

 

思路:
先把每艘船的重量进行从小到大的排序,定义两个变量分别指向第一艘船和最后一艘船的下标,如果剩余人数 > 0:
指向的两个人重量相加如果小于等于C,那么两个变量指向更新,剩余人数 -= 2,需要船只+1,否则就是大于C那么右边指向的人单独坐一艘船,人数-1且指向更新。

 1 import java.util.Arrays;
 2 import java.util.Scanner;
 3 
 4 public class Eight_9乘船问题 {
 5 
 6     public static void main(String[] args) {
 7         Scanner in = new Scanner(System.in);
 8         int n = in.nextInt();
 9         int[] w = new int[n];
10         for(int i = 0; i < 10; i++){
11             w[i] = in.nextInt();
12         }
13         int c = in.nextInt();
14         
15         Arrays.sort(w);
16         int cntOfPerson = n;
17         int cntOfBoat = 0;
18         int p1 = 0;
19         int p2 = n-1;
20         while(cntOfPerson > 0){
21             if(w[p1]+w[p2] >= c){
22                 p2--;
23                 cntOfPerson--;
24                 cntOfBoat++;
25             }else{
26                 p1++;
27                 p2--;
28                 cntOfPerson -= 2;
29                 cntOfBoat++;
30             }
31         }
32         System.out.println(cntOfBoat);
33     }
34 }

 

标签:p2,cntOfBoat,指向,8.9,++,问题,int,cntOfPerson,乘船
来源: https://www.cnblogs.com/z1110/p/12785690.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有