zoukankan      html  css  js  c++  java
  • nyoj71--独木舟上的旅行

    描述

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

    输入
    第一行输入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

    上传者


    该题的解题思路很简单,即把输入的n组数据进行排序,然后从大到小进行选取,若最大的加上最小的小于最大的承载量,则加一,否则选择最大的,然后再加一。


    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <iostream>
    using namespace std;
    #include <algorithm>
    int main()
    {
    	int s,n;
    	float w;
    	float a[310];
    	int i,j,m;
    	scanf("%d",&s);
    	while (s--)
    	{
    		m=0;
    		memset(a,0,sizeof(a));
    		scanf("%f%d",&w,&n);
    		for (i=0;i<n;i++)
    		{
    			scanf("%f",&a[i]);
    		}
    		sort(a,a+n);
    		j = 0;
    		i = n-1;
    		while (i >= j)//代码在这里进行选择,求出最少的船只数
    		{
    			//printf("afdsf
    ");
    			if ((a[i]+a[j])<=w)
    			{
    				i--;
    				j++;
    				m++;
    			}
    			else
    			{
    				i--;
    				m++;
    			}
    		}
    		/*for (i=n-1;i>=0;i--)
    		{
    			printf("%0.f",a[i]);
    		}*/
    		printf("%d
    ",m);
    	}
    	return 0;
    }
  • 相关阅读:
    earlycon 的使用【转】
    DDR工作原理【转】
    DDR工作时序与原理【转】
    kernel内存、地址【转】
    Linux时间子系统之定时事件层(Clock Events)【转】
    QEMU 2.10.1 编译安装【转】
    Kernel 内核调试【转】
    The Slab Allocator in the Linux kernel【转】
    Linux内存管理:slub分配器【转】
    linux内存管理笔记(二十七)----slub分配器概述【转】
  • 原文地址:https://www.cnblogs.com/acmwangpeng/p/5524899.html
Copyright © 2011-2022 走看看