• nyoj 71-独木舟上的旅行(贪心)


    71-独木舟上的旅行

        内存限制:64MB 时间限制:3000ms 特判: No 
        通过数:10 提交数:15 难度:2 

    题目描述:

    进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别。一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量。我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数。现在请写一个程序,读入独木舟的最大承载量、旅客数目和每位旅客的重量。根据给出的规则,计算要安置所有旅客必须的最少的独木舟条数,并输出结果。

    输入描述:

    第一行输入s,表示测试数据的组数;
    每组数据的第一行包括两个整数w,n,80<=w<=200,1<=n<=300,w为一条独木舟的最大承载量,n为人数;
    接下来的一组数据为每个人的重量(不能大于船的承载量);

    输出描述:

    每组人数所需要的最少独木舟的条数。

    样例输入:

    3
    85 6
    5 84 85 80 84 83
    90 3
    90 45 60
    100 5
    50 50 90 40 60
    

    样例输出:

    5
    3
    3

    分析:
      1、排完序后,从两边开始向中间贪心;
      2、两端之和小于总重,两端共同向中心靠近一步,否则就是大的那点向中心靠近
      PS:输入、输出要注意数据类型

    核心代码:
     1 while(i <= j)
     2 {
     3     if(A[i] + A[j] <= max_weight)
     4     {
     5         ++ i, -- j;
     6         ++ cnt;
     7     }
     8     else
     9     {
    10         ++ i;
    11         ++ cnt;
    12     }
    13 }

    C/C++代码实现(AC):

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <cstdio>
     5 #include <cmath>
     6 #include <stack>
     7 #include <map>
     8 #include <queue>
     9 #include <set>
    10 
    11 using namespace std;
    12 const int MAXN = 310;
    13 int A[MAXN];
    14 
    15 int main()
    16 {
    17     int t;
    18     scanf("%d", &t);
    19     while(t --)
    20     {
    21         int max_weight, n, cnt = 0, i = 0, j;
    22         scanf("%d%d", &max_weight, &n);
    23         for(int i = 0; i < n; ++ i)
    24             scanf("%d", &A[i]);
    25         sort(A, A+n,greater<int>());
    26         j = n-1;
    27 
    28         while(i <= j)
    29         {
    30             if(A[i] + A[j] <= max_weight)
    31             {
    32                 ++ i, -- j;
    33                 ++ cnt;
    34             }
    35             else
    36             {
    37                 ++ i;
    38                 ++ cnt;
    39             }
    40         }
    41         printf("%d
    ", cnt);
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    leetcode -- Merge Two Sorted Lists
    leetcode -- Rotate List
    leetcode -- Merge Intervals
    leetcode -- Insert Interval
    Egret入门学习日记 --- 第八篇(书中 2.0~2.6节 内容)
    Egret入门学习日记 --- 第七篇(书中 3.9节 内容)
    Egret入门学习日记 --- 第五篇(书中 3.5节 内容)
    Egret入门学习日记 --- 第四篇(书中 3.1~3.3 内容)
    Egret入门学习日记 --- 第三篇 (书中 3.4 内容)
    Egret入门学习日记 --- 第二篇 (书籍的选择 && 书籍目录 && 书中 3.3 节 内容)
  • 原文地址:https://www.cnblogs.com/GetcharZp/p/9111634.html
Copyright © 2020-2023  润新知