zoukankan      html  css  js  c++  java
  • 8.3贪心策略例题:快速渡河问题

    快速渡河:
    T队人,有n个人想过河,但只有一条船,船同时最多装2个人,每一次过河,过河时间为船上用时
    最多的那人的过河时间,如果还有人没有过河,那么回来1人在带人过去。问n个人过河最少要多少时间?

     1 import java.util.Arrays;
     2 import java.util.Scanner;
     3 
     4 public class Eight_3贪心策略例题_快速渡河问题 {
     5     public static void main(String[] args) {
     6         Scanner in = new Scanner(System.in);
     7         int T = in.nextInt();
     8         for(int i = 0; i < T; i++){
     9             int n = in.nextInt();
    10             int[] speed = new int[n];
    11             for(int j = 0; j < n; j++){
    12                 speed[j] = in.nextInt();
    13             }
    14             Arrays.sort(speed);
    15             f(n, speed);
    16         }
    17     }
    18     private static void f(int n, int[] speed) {
    19         int left = n;
    20         int ans = 0;
    21         while(left > 0){
    22             if(left == 1){ //只有一人
    23                 ans += speed[0];
    24                 break;
    25             }else if(left == 2){ //只有两人
    26                 ans += speed[1];
    27                 break;
    28             }else if(left == 3){ //有三人
    29                 ans += speed[2] + speed[0] + speed[1];
    30                 break;
    31             }else{
    32                 //1,2出发,1返回,最后两名出发,2返回
    33                 int s1 = speed[1] + speed[0] + speed[left-1] + speed[1];
    34                 //1,3出发,1返回,1,4出发,1返回,1,2过河
    35                 int s2 = speed[left-1] + speed[left-2] + 2*speed[0];
    36                 ans += Math.min(s1, s2);
    37                 left -= 2; //左侧是渡河的起点,left代表左侧的剩余人数
    38             }
    39         }
    40         System.out.println(ans);
    41     }
    42 }
  • 相关阅读:
    电子商务概论【0351】
    数据库原理
    建筑结构CAD[0753]
    计算机图像处理基础[9124]
    计算机基础[1056]
    计算机组成原理【0013】
    C语言程序设计【0039】
    计算机基础1056
    专业英语[0089]
    double数据转换成char字符串的函数——dtostrf()用法
  • 原文地址:https://www.cnblogs.com/z1110/p/12727000.html
Copyright © 2011-2022 走看看