Crossing River

题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=26251

题意:

N个人希望去过河,但每次只能过两个且要有一个人把船划回来接其他的人;

两个人一起过河所用的时间是两个人中单独过河时间最多的;

求所有人过河所需要的最少的时间。

思路分析:

定义一个装n个人中每个人过河所需要的时间数组a[];并用sort进行从小到大进行排序。

求将最慢的和次慢的运过去所需的最少时间,下面有两种可能使所需时间最短的运送的方法:

1)先让最快的和次快的过去且让最快的回来,后要最慢的和次慢的过去让次快的回来;

这样所需要的时间为a[0]+2*a[1]+a[n-1]

2)让最慢的和最快的过去最快的回来;再让最快的和次慢的过去最快的回来;

这样所需要的时间为2*a[0]+a[n-1]+a[n-2]

将这两种方法所需的时间进行比较。

说明:当只有3个人或更少时不管如何过河所需的时间都是他们单独过河所需的时间的总和。

 #include<iostream>
#include<algorithm>
using namespace std;
const int maxn=;
int main()
{
int i,j,t,n,sum,a[maxn];
cin>>t;
while(t--)
{
j=;sum=;
cin>>n;
for(i=;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(i=n-;i>;i-=)
if(a[]+*a[]+a[i]<*a[]+a[i]+a[i-])
sum=sum+a[]+*a[]+a[i];
else
sum+=*a[]+a[i]+a[i-];
if(i==)
sum=sum+a[]+a[]+a[];
if(i==)
sum=sum+a[];
if(i==)
sum+=a[];
cout<<sum<<endl;
}
return ;
}

Crossing River的更多相关文章

  1. POJ 1700 Crossing River (贪心)

    Crossing River Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9585 Accepted: 3622 Descri ...

  2. Crossing River(1700poj)

    Crossing River Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9919   Accepted: 3752 De ...

  3. poj 1700 Crossing River 过河问题。贪心

    Crossing River Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9887   Accepted: 3737 De ...

  4. poj1700--贪心--Crossing River

    Crossing River Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12260   Accepted: 4641 D ...

  5. POJ1700:Crossing River(过河问题)

    POJ1700 题目链接:http://poj.org/problem?id=1700 Time Limit:1000MS     Memory Limit:10000KB     64bit IO ...

  6. I - Crossing River

    A group of N people wishes to go across a river with only one boat, which can at most carry two pers ...

  7. 贪心Crossing river

    英文题目: A group of N people wishes to go across a river with only one boat, which can at most carry tw ...

  8. POJ 1700 - Crossing River

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13982   Accepted: 5349 Description A gr ...

  9. ACM学习历程——POJ 1700 Crossing River(贪心)

    Description A group of N people wishes to go across a river with only one boat, which can at most ca ...

随机推荐

  1. usb设备驱动描述,王明学learn

    usb设备驱动 本章主要内容包含以下:USB总线介绍,USB协议分析,USB系统架构 一.USB总线介绍 1.1USB发展史 USB(Universal Serial Bus)通用串行总线,是一种外部 ...

  2. Codeforces Beta Round #89 (Div. 2) E. Bertown roads(Tarjan、边双连通分量)

    题目链接:http://codeforces.com/problemset/problem/118/E 思路:首先要判断图是否是边双连通,这个Tarjan算法可以判断,若low[v] > dfn ...

  3. 为什么我们可以使用while(~scanf("%d"))读到文件末尾

    经过测试文件末尾是一个标志位EOF 在c语言里我们用int来输出EOF 可以发现EOF等于-1 我们之前那个文章已经写过了..在c语言里负数的存储策略是补码 [-1]的补码=~(1)+1 那么就是比如 ...

  4. sql 数字转人民币大写函数(两种方法)

    ,)) returns @rmb table( 亿 ) ,仟万 ) ,佰万 ) ,拾万 ) ,万 ) ,仟 ) ,佰 ) ,拾 ) ,元 ) ,角 ) ,分 )) as begin insert in ...

  5. ViewPager,实现真正的无限循环(定时+手动)

    利用定时器,实现循环轮播,很简单:只需在定时器的消息里加如下代码即可: int count = adapter.getCount(); if (count > 1) { // 多于1个,才循环 ...

  6. Linux中查看jdk版本

    linux查看java jdk安装路径和设置环境变量 windows: set java_home:查看JDK安装路径 java -version:查看JDK版本 linux: whereis jav ...

  7. js基础知识总结(2016.11.1)

    js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划():避 ...

  8. junit单元测试中私有方法测试

    1.单元测试可以对系统逻辑进行每个单元模块的测试. 2.单元测试也可以作为回归测试的依据,可以避免升级完善功能时引入问题. 3.单元测试要求将代码写的更清晰,更易于测试. 4.有时单元测试需要测试私有 ...

  9. 字体和壁纸合并后再更改壁纸--《用delphi开发共享软件》-15.2桌面提示器

    procedure TFrmPlay.mnDeskPicClick(Sender: TObject); Var s:String; i:Integer; begin //s:=Path+'SetPic ...

  10. 设置某个ip对mysql服务器有权限,以及mysql定时备份

    CREATE USER 'new_username'@'211.68.%.%' IDENTIFIED BY 'password_for_new_username'; GRANT ALL ON * TO ...