zoukankan      html  css  js  c++  java
  • nyoj 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
    上传者
    第一次代码,超时
    #include<stdio.h>
    #include<algorithm>
    using namespace  std;
    int a[305];
    int cmp(int a,int b)
    {
        return a>b?a:b;
    }
    int main()
    {
    //    freopen("250.txt","r",stdin);
        int k,t,i,j,w,n;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&w,&n);
            k=n;
            for(i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
            }
            sort(a,a+n,cmp);
            for(i=0;i<n;i++)
            {
                if(a[i]>w)
                continue;
                for(j=i+1;j<n;j++)
                {
                    if(a[i]+a[j]<=w)
                    {
                        a[j]=w+1;
                        k--;
                        break;
                    }
                }
            }
            printf("%d
    ",k);
        }
        return 0;
    }
    View Code

    第二次,去掉sort排序后,AC

    #include<stdio.h>
    #include<algorithm>
    using namespace  std;
    int a[310];
    int main()
    {
     //  freopen("250.txt","r",stdin);
        int k,t,i,j,w,n,l,d;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&w,&n);
            k=0;
            for(i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
            }
            for(i=0;i<n;i++)
            {
                if(a[i]>w)
                continue;
                d=0;l=i;
                for(j=i+1;j<n;j++)
                {
                    if(a[i]+a[j]<=w)
                    {
                        if(a[j]>d)
                        {
                            d=a[j];
                            l=j;
                        }
                    }
                }
                a[l]=w+1;
                k++;
            }
            printf("%d
    ",k);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    MYSQL优化
    linux 基础知识 之基础系统管理2
    mysql数据库读写分离+高可用
    Varnish代理缓存服务器
    tomcat
    Memcached, Redis, MongoDB区别、特点、使用场景
    session共享
    基于docker的zabbix服务搭建
    php-fpm 启动后没有监听端口9000
    学习网站
  • 原文地址:https://www.cnblogs.com/asd1234/p/3384715.html
Copyright © 2011-2022 走看看