博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
贪心—— P1809 过河问题_NOI导刊2011提高(01)
阅读量:5831 次
发布时间:2019-06-18

本文共 1841 字,大约阅读时间需要 6 分钟。

洛谷——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
#include
#include
#include
#include
#define N 100001#define maxn 123456using namespace std;int n,t[N],ans,s;//s为在西岸上剩下的人的个数,ans为总共用的时间 int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&t[i]); sort(t+1,t+1+n);//先进行排序 s=n; while(s) { if(s==1) { ans+=t[1]; break; } if(s==2) { ans+=t[2]; break; } if(s==3) { ans+=t[1]+t[2]+t[3]; break; } if(s>3) { ans+=min(t[1]+t[2]+t[2]+t[s],t[s]+t[s-1]+t[1]*2); s-=2; } } printf("%d",ans); return 0; }

 

转载于:https://www.cnblogs.com/z360/p/6822572.html

你可能感兴趣的文章
Java theory and practice: Thread pools and work queues--reference
查看>>
深入分析C++引用
查看>>
面向对象设计
查看>>
Eclipse 出现Some sites could not be found. See the error log for more detail.错误 解决方法
查看>>
破解之API断点法
查看>>
程序员健身之马拉松篇
查看>>
2.[Yii]创建与设置默认控制器及载入模板
查看>>
顺序容器
查看>>
Win7 64位 IIS未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项
查看>>
cocos2dx ui显示机制
查看>>
S3C6410裸奔之旅——RVDS2.2编译、仿真、调试过程 LED流水灯---转的
查看>>
iOS开发网络篇—简单介绍ASI框架的使用
查看>>
简单的topK问题
查看>>
27、Service
查看>>
【BZOJ】3479: [Usaco2014 Mar]Watering the Fields(kruskal)
查看>>
xcode简介
查看>>
随机视频聊天
查看>>
【进阶修炼】——改善C#程序质量(3)
查看>>
用Unity做的一个小游戏,仿照一个样例写的,个人认为文章写的不错,哈哈
查看>>
北京西客站火车行李托运指南
查看>>