1700 Crossing River
题目链接: http://poj.org/problem?id=1700
1. 当1个人时: 直接过河 t[0].
2. 当2个人时: 时间为较慢的那个 t[1].
3. 当3个人时: 时间为 t[0]+t[1]+t[2].
4. 当4个以上的人时, 将t[0] 和 t[1]当作搬运工. 两种方案:
- 最快和次快的过去, 最快的回来, 最慢和次慢的过去, 次快的回来, 这样就将最慢和次慢的送过去了. 时间: t[0]+2*t[1]+t[i]
- 最快的依次送最慢和次慢的过去再回来, 时间: 2*t[0]+t[i-1]+t[i]
以上方案每次就将最慢的和次慢的送过河, 每次送走两个人, 当将其他人送完之后, t[0]和t[1]再过河.
#include <iostream>
#include <algorithm>
using namespace std;
bool comp(int a,int b){
return a<b;
}
int main(){
int m,n,t[],i,sum;
cin>>m;
while(m--){
cin>>n;
sum = ;
for(i=;i<n;++i)
cin>>t[i];
sort(t,t+n,comp);
for(i=n-;i>;i-=){
//把t[0]和t[1]当成搬运工,最后返回到原地
int t1 = t[]+*t[]+t[i];//最快的(即所用时间t[0])和次快的过河,然后最快的将船划回来,再次慢的和最慢的过河,然后次快的将船划回来
int t2 = *t[]+t[i-]+t[i];//最快的和最慢的过河,然后最快的将船划回来,再最快的和次慢的过河,然后最快的将船划回来
sum += t1>t2?t2:t1;
}
if(i==) //3people left
sum += t[]+t[]+t[];
else if(i==) //2 people left
sum += t[];
else // 1 people left
sum += t[];
cout<<sum<<endl;
}
return ;
}
-->
1700 Crossing River的更多相关文章
- POJ 1700 Crossing River (贪心)
Crossing River Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9585 Accepted: 3622 Descri ...
- poj 1700 Crossing River 过河问题。贪心
Crossing River Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9887 Accepted: 3737 De ...
- poj 1700 Crossing River C++/Java
http://poj.org/problem?id=1700 题目大意: 有n个人要过坐船过河,每一个人划船有个时间a[i],每次最多两个人坐一条船过河.且过河时间为两个人中速度慢的,求n个人过河的最 ...
- POJ 1700 - Crossing River
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13982 Accepted: 5349 Description A gr ...
- 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 ...
- Crossing River(1700poj)
Crossing River Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9919 Accepted: 3752 De ...
- Crossing River
Crossing River 题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=26251 题意: N个人希望去过 ...
- POJ 1700 cross river (数学模拟)
...
- poj1700--贪心--Crossing River
Crossing River Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12260 Accepted: 4641 D ...
随机推荐
- MySQL Join算法与调优白皮书(三)
Batched Key Access Join Index Nested-Loop Join虽好,但是通过辅助索引进行链接后需要回表,这里需要大量的随机I/O操作.若能优化随机I/O,那么就能极大的提 ...
- if __name__=="__main__": 这个结尾的理解
print "别人应用我做为模块导入,就只看到我" if __name__=="__main__": print "自己文件执行就看到我输出" ...
- $.each $.map 和 $().each $().map
$.each :用于遍历数据,如json. $(function () { var data = [{'name': 'a', 'age': 12}, {'name': 'b', 'age': 12} ...
- 列表:list[1],切片list[1:3],追加insert,修改,删除remove,del,pop,查找index,统计count,清空list.clear() 翻转list.reverse(),排序list.sort(),扩展list.extend,
列表的定义: 列表的使用以及取值:用逗号的方式,取列表两个值,会打印出2个项目,两个项目之间自动有一个空格. 如果想取中间几个值: 请注意,如果取值1和2,那么要写[1,3],要记住这里是顾头不顾尾. ...
- ESXI5-WIN2008R2安装域控以及额外域笔记
每次安装域控都要找教程,每次都没法一次性搞定.写个笔记吧...主要是给自己看的.写的比较含糊.不清楚的可以直接QQ本人. 1.安装WIN2008R2,192.168.188.10 2.上载SLICET ...
- Java - 将 List 等分(最后一部分处理多余部分)
背景 今天由于要使用多线程,所以事先需要确定启动线程个数.于是需要先将集合进行分配,确定线程的个数. 解决方案 首先是实现 public static <T> List<List&l ...
- bbbbb
- Math对象及相关方法
Math.abs() 取绝对值 Math.ceil()向上取整 (出现小数点就向上+1) Math.floor()向下取整 Math.round()四舍五入 Math.max(val1,val2,va ...
- sgdisk基本用法
简介 sgdisk是Linux下操作GPT分区的工具,就像fdisk是操作MBR分区的工具.关于GPT和MBR的区别请参考: http://www.anchor.com.au/blog/2012/10 ...
- CentOS7.6安装Redis
官网下载地址:https://redis.io/download 第一步:软件下载安装 进行安装目录:cd /opt/software (如果目录不存在,请先创建目录) 下载二进制包:wget htt ...