zoukankan      html  css  js  c++  java
  • 8.9乘船问题

    /**
    乘船问题:
    有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 }
  • 相关阅读:
    Go 模板
    使用Go开发web服务器
    CLI:使用Go开发命令行应用
    MyBatis 注解使用动态SQL
    Tomcat 使用Redis存储Session
    [翻译] java NIO Buffer
    [翻译] java NIO Channel
    [翻译]java nio 概述
    [翻译] java NIO 教程---介绍
    接口的定义常量与使用
  • 原文地址:https://www.cnblogs.com/z1110/p/12785690.html
Copyright © 2011-2022 走看看