zoukankan      html  css  js  c++  java
  • NYOJ 71 独木舟上的旅行【贪心】

    解题思路:给出船的最大载重量w,和n个人,每只船最多可以乘坐两个人,问怎样坐船使得安排的船只的数量最少。
    这n个人的体重为a1,a2,a3,---,an-1,an
    首先将体重按升序排列好,再考虑最重的人,如果当前数列中连乘最轻的人都不能和他共乘一只船,那么他就只有一个人乘船了。                                                                
    a[i](代表当前最轻的人)           a[j]代表当前最重的人 
    则j从n开始遍历,i从1开始,如果找到能够配对的,则i++,j--,这两个人乘同一艘船sum++;
    如果没有找到能够配对的,则j--,这个人独自坐一艘船,sum++;

    独木舟上的旅行

    时间限制: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

    #include<iostream>  
    #include<string>  
    #include<cstring>  
    #include<cstdio>  
    #include<algorithm>   
    using namespace std; 
    int cmp(int a,int b)
    {
    	return a<b;
    }
    int main()
    {
    	int ncase,a[500],i,j,w,n,sum;
    	scanf("%d",&ncase);
    	while(ncase--)
    	{
    		sum=0;
    		scanf("%d %d",&w,&n);
    		for(i=1;i<=n;i++)
    		scanf("%d",&a[i]);
    		sort(a+1,a+n+1,cmp);
    		
    		i=1;
    		j=n;
    		while(i<=j)
    		{
    			if(a[i]+a[j]<=w)
    			{
    				i++;
    				j--;
    				sum++;
    			}
    			else
    			{
    				j--;
    				sum++;
    			}
    		}
    		printf("%d
    ",sum);
    		
    	}
    }
    

      

  • 相关阅读:
    php命令注入
    mysql事物
    安装php环境
    移除服务器缓存实例
    show user profile synchronization tools
    manual start user profile import
    JSON is undefined. Infopath Form People Picker in SharePoint 2013
    asp.net web 应用站点支持域账户登录
    Load sharepoint envirement by powershell
    sharepoint 2016 download
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4185817.html
Copyright © 2011-2022 走看看