洛谷——P1809 过河问题_NOI导刊2011提高(01)

题目描述

有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸。而东岸边有一条小船。

船太小了,一次只能乘坐两人。每个人都有一个渡河时间T,船划到对岸的时间等于船上渡河时间较长的人所用时间。

现在已知N个人的渡河时间T,Oliver想要你告诉他,他们最少要花费多少时间,才能使所有人都过河。

注意,只有船在东岸(西岸)的人才能坐上船划到对岸。

输入输出格式

输入格式:

输入文件第一行为人数N,以下有N行,每行一个数。

第i+1行的数为第i个人的渡河时间。

输出格式:

输出文件仅包含一个数,表示所有人都渡过河的最少渡河时间

输入输出样例

输入样例#1:

4 
6 
7 
10 
15 
输出样例#1:

42

说明

[数据范围]

对于40%的数据满足N≤8。

对于100%的数据满足N≤100000。

[样例解释]

初始:东岸{1,2,3,4},西岸{}

第一次:东岸{3,4},西岸{1,2} 时间7 第二次:东岸{1,3,4},西岸{2} 时间6 第三次:东岸{1},西岸{2,3,4},时间15 第四次:东岸{1,2},西岸{3,4} 时间7 第五次:东岸{},西岸{1,2,3,4} 时间7

所以总时间为7+6+15+7+7=42,没有比这个更优的方案。

思路:

对于一群人要过河,快的人一定是要迁就慢的人,也就是说两个人过河的时候他们过河时间就是他们中慢的那个人的所用的时间

对于每一种分配方式我们都可以在最后的时候剩下1,2,3个人这三种情况

若我们岸上剩的人的个数大于3个人时,我们每一次都拉两个人过河,这样不会把有种情况拉下(再说每次只能拉两个人)

对于岸上的人的个数大于3个的这种情况,我们可以这样想:

该情况要分两种情况:1。先让最快的两个人过去,然后让最快的那个人回来拉最慢的两个人。

有人可能会觉得这种情况就已经是最优情况(至少当时我是那么觉得)

但是!我们来看下面的一个例子:1   2   10   13

    对于这种情况,我们让最快的两个人过河和然后再让最快的人回来拉最慢的那两个人,这样所用的时间就是:2+1+10+1+13

这样的话是不是就不如:我们先让最快的两个人过河,然后再让最快的人回来,让最快的人留在岸上,先让最慢的两个人搭伙过河,然后

再让第二快的人回来接最快的人所用的时间:2+1+13+2所用的时间少?!

代码:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 100001
#define maxn 123456
using namespace std;
int n,t[N],ans,s;//s为在西岸上剩下的人的个数,ans为总共用的时间
int main()
{
    scanf("%d",&n);
    ;i<=n;i++)
      scanf("%d",&t[i]);
    sort(t+,t++n);//先进行排序
    s=n;
    while(s)
    {
        )
        {
            ans+=t[];
            break;
        }
        )
        {
            ans+=t[];
            break;
        }
        )
        {
            ans+=t[]+t[]+t[];
            break;
        }
        )
        {
            ans+=min(t[]+t[]+t[]+t[s],t[s]+t[s-]+t[]*);
            s-=;
        }
    }
    printf("%d",ans);
    ;
 } 

贪心—— P1809 过河问题_NOI导刊2011提高(01)的更多相关文章

  1. 洛谷P1809 过河问题_NOI导刊2011提高(01)

    To 洛谷.1809 过河问题 题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能乘坐两人.每个人都有一个渡河时 ...

  2. luogu P1809 过河问题_NOI导刊2011提高(01)

    题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能乘坐两人.每个人都有一个渡河时间T,船划到对岸的时间等于船上渡 ...

  3. P1809 过河问题_NOI导刊2011提高(01)

    题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能乘坐两人.每个人都有一个渡河时间T,船划到对岸的时间等于船上渡 ...

  4. P1836 【数页码_NOI导刊2011提高(04)】

    P1836 数页码_NOI导刊2011提高(04) 题目描述 一本书的页码是从1—n编号的连续整数:1,2,3,…,n.请你求出全部页码中所有单个数字的和,例如第123页,它的和就是1+2+3=6. ...

  5. 洛谷 P1808 单词分类_NOI导刊2011提高(01)

    P1808 单词分类_NOI导刊2011提高(01) 题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且仅当 ...

  6. 洛谷P1808 单词分类_NOI导刊2011提高(01) 字符串排序

    洛谷P1808 单词分类_NOI导刊2011提高(01) 题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且 ...

  7. 公共子序列_NOI导刊2011提高(03)题

    题面 这道题有点坑人啊~ 首先,它需要取模,模数是100000000:(窝在这里死了好久好久,看了别人的代码才发现这一点) 然后我发现题解中没有序列自动机的方法,于是就来一发 首先,虽然序列自动机在定 ...

  8. P1835 素数密度_NOI导刊2011提高(04)

    题目描述 给定区间[L,R](L≤R≤2147483647,R-L≤1000000),请计算区间中素数的个数. 输入输出格式 输入格式: 两个数L和R. 输出格式: 一行,区间中素数的个数. 输入输出 ...

  9. 单人纸牌_NOI导刊2011提高(04)

    单人纸牌 时间限制: 1 Sec  内存限制: 128 MB 题目描述 单人纸牌游戏,共 36 张牌分成 9 叠,每叠 4 张牌面向上.每次,游戏者可以从某两个不同的牌堆最顶上取出两张牌面相同的牌(如 ...

随机推荐

  1. Thinkhphp5控制器调用的Model层的方法总结

    控制器器里: <?php /** * Created by PhpStorm. * User: Haima * Date: 2018/7/8 * Time: 15:58 */ namespace ...

  2. 采用Atlas+Keepalived实现MySQL读写分离、读负载均衡

    ========================================================================================== 一.基础介绍 == ...

  3. Gym - 100781A Adjoin the Networks (树的直径)

    题意: n个点,m条边,m <= n <= 100000,边的长度都为1. 点从 0 ~ n-1 编号.开始时图是不连通的,并且没有环. 通过加入一些边后,可以使图连通.要求加入的边不能多 ...

  4. poj 1328 安雷达问题 贪心算法

    题意:雷达如何放置?在xoy二维平面坐标系里面,x轴上方的为岛屿,x轴下方的是雷达要放到位置,如何放使得雷达放的最少? 思路 肯定放在x轴上减少浪费是最好的选择 什么情况下,雷达无法到达呢?--以这个 ...

  5. 【Alpha】Scrum Meeting 5-end

    第一天:2019/6/19 前言: 第5次会议在6月19日由PM在教9C-501召开. 总结项目,进行单元测试并进行简单的整合.时长60min. 团队GitHub仓库 仓库连接 1.1 今日完成任务情 ...

  6. Linux权限和指令的关系

    1.让用户能进入某目录称为”可工作目录“的基本权限为何: 可使用的指令:例如cd等变换工作目录的指令: 目录所需权限:用户对这个目录至少需要具有x的权限 额外需求:如果用户想要在这个目录内利用ls查阅 ...

  7. 一个程序员一月的开销统计分析、(附上PC端和移动端android源码)

    图片1(类别): 图片中的数据是我一月的花费统计分析. 这是该网站的地址:http://www.10086bank.com/(需要登录)  没有帐号马上注册一个吧.进入系统后点击“记一笔”  添加数据 ...

  8. doc下设置永久环境变量的好方法

    http://www-2w.blog.163.com/blog/static/97931518201021211123267/ 需要查看命令具体实现:setx machine “%path%”. 配置 ...

  9. python 计算日期间隔

    from datetime import date a = date(2011,11,24) b = date(2011,11,17) print(a-b)

  10. redis安装、配置和启动

    一.运行环境 1.vmware虚拟机上的centos7系统,安装步骤略,网上搜搜就有,连接工具:secureCRT 2.新安装的linux,是没有wget命令,所以先执行这个命令安装下:yum -y ...