zoukankan      html  css  js  c++  java
  • 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;

    }

  • 相关阅读:
    Python+Selenium三种等待方法
    Jmeter结果分析_聚合报告
    Linux安装Python3
    翻译Go Blog: 常量
    Go: 复合数据类型slice
    Python创建二维列表的正确姿势
    了解Flask
    urllib3中学到的LRU算法
    了解Prometheus
    《redis 5设计与源码分析》:第二章 简单动态字符串
  • 原文地址:https://www.cnblogs.com/zhouhongweihpu/p/3260908.html
Copyright © 2011-2022 走看看