• ny-71-独木舟上的旅行


    独木舟上的旅行

    时间限制:3000 ms  |  内存限制:65535 KB

    难度: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、          最轻的啊a[0]和a[n]相加的和小于船的承载重量即可。

    3、          若大于船的承载重量,把最重的一个人坐一个穿,和a[n-1]重复2、3.

    程序代码:

    #include<stdio.h>

    #include<string.h>

    #include<stdlib.h>

    int cmp(const void *a,const void *b)

    {

        return *(int *)a - *(int *)b;

    }

    int main()

    {

        int a[300],n,m,w,i,j,sum;

        scanf("%d",&n);

        while(n--)

        {

            scanf("%d %d",&w,&m);

            for(i=0;i<m;i++)

            {

                scanf("%d",&a[i]);

            }

            qsort(a,m,sizeof(a[0]),cmp);

            sum=0;

            for(i=0,j=m-1;i<=j;)            // 注意判断什么时候停止循环

            {

                if(a[i]+a[j]<=w&&j!=i)

                {sum++;i++;j--;}           //  满足条件 i 要加一  j 要减一

                else

                {sum++;j--;}

            }

            printf("%d ",sum);

        }

        return 0;

    }

  • 相关阅读:
    TOJ3650 Legal or Not
    Fork/Join框架之双端队列
    [每日一题] OCP1z0-047 :2013-08-26 TIMESTAMP WITH LOCAL TIME ZONE....................112
    [C++基础]C++中静态成员函数如何访问非静态成员
    HDU 1504 Disk Tree
    Android Checkbox Example
    STM32F103定时器输出PWM波控制直流电机
    SICP 习题 (1.7) 解题总结
    Linux磁盘及文件系统管理 4---- Linux文件系统挂载管理
    推荐《Linux 多线程服务器端编程》
  • 原文地址:https://www.cnblogs.com/zhouhongweihpu/p/3260908.html
Copyright © 2020-2023  润新知