NYOJ 题目47 过河问题 (贪心)
过河问题
- 描述
-
在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,N人所需要的时间已知;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这N人尽快过桥。
- 输入
-
第一行是一个整数T(1<=T<=20)表示测试数据的组数
每组测试数据的第一行是一个整数N(1<=N<=1000)表示共有N个人要过河
每组测试数据的第二行是N个整数Si,表示此人过河所需要花时间。(0<Si<=100) - 输出
- 输出所有人都过河需要用的最少时间
- 样例输入
-
1 4 1 2 5 10
- 样例输出
-
17
- 来源
- POJ
- 上传者
-
张云聪
思路: http://blog.csdn.net/lyhvoyage/article/details/23196933ac代码
如果n==1或者n==2,所有人直接过河即可;
如果n==3,用时最短的和用时最长的一起过去,然后用时最短的回来,再和剩下的一个人过去 ;
如果n>=4,设a[0]表示用时最短的人所用的时间,a[1]为用时第二短的人所用的时间,a[n-1]表示用时最长的人所用的时间,a[n-2]表示用时第二长的人所用的时间。那么:
当2a[1] + a[0] + a[n-1] > 2a[0] + a[n-1] + a[n-2]时,就先让用时最短的人和用时最长的人一起过去,然后用时最短的回来,接着让用时最短的和用时第二长的一起过去,再让用时最短的回来。
否则,就先让用时最短的和用时第二短的一起过去,然后用时最短的回来,接着让用时最长和用时第二长的一起过去,再让用时第二短的回来。这样就相当于剩下了n-2个人。对这n-2个人执行相同的操作,知道剩下不足4个人即可
ac代码
#include<stdio.h> #include<string.h> #include<stdlib.h> int cmp(const void *a,const void *b) {return *(int *)a-*(int *)b; } int a[1010]; int main() {int t;scanf("%d",&t);while(t--){int n,i,sum=0;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);qsort(a,n,sizeof(a[0]),cmp);while(n>=4){if(2*a[1]+a[n-1]+a[0]>2*a[0]+a[n-1]+a[n-2]){sum+=2*a[0]+a[n-1]+a[n-2];}elsesum+=2*a[1]+a[n-1]+a[0];n-=2;}if(n==3)sum+=a[1]+a[0]+a[2];elseif(n==2)sum+=a[1];elsesum+=a[0];printf("%d\n",sum);} }
NYOJ 题目47 过河问题 (贪心)相关推荐
- 题目47:最大公约数
http://ac.jobdu.com/problem.php?cid=1040&pid=46 题目描述: 输入两个正整数,求其最大公约数. 输入: 测试数据有多组,每组输入两个正整数. 输出 ...
- nyoj 691 青蛙过河
题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=619 /// 这道题好像是青蛙过河,我也没有翻译,因为之前做过一个这样的题,就是一条河有 ...
- nyoj 题目5 Binary String Matching
Binary String Matching 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Given two strings A and B, whose alpha ...
- NYOJ - 独木舟上的旅行(贪心)
http://nyoj.top/problem/71 内存限制:64MB 时间限制:3000ms 题目描述: 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两 ...
- 活动选择与小船过河问题(贪心算法)
活动选择问题描述: 存在一个教室,有下面若干个活动需要安排在一天进行,活动之间不能重叠,如何安排活动使活动的数量最多? 活动序号 1 2 3 4 5 6 7 8 9 10 11 (活动已经按结束时间 ...
- 农夫过河——python贪心算法实现
1.问题描述: 一个农夫在河的西岸带了一匹狼.一只羊和一棵白菜,他需要把这三样东西用船带到河的东岸.然而,这艘船只能容下农夫本人和另外一样东西.如果农夫不在场的话,狼会吃掉羊,羊也会吃掉白菜. 2.问 ...
- 过河问题----贪心
题目描述: 过河 (20 分) 有N个人想要过一条河,但是他们只有一条最多载两人的船.因此必须想出一个调度船来回的方法让每个人都能过河.每个人都有自己的划船速度,且同一条船上的两个人取决于慢者的速度. ...
- 哈理工OJ-1584-青蛙过河【贪心+二分】
青蛙王国一年一度的游戏又开始了,这个游戏要求青蛙必须跳过河.河的宽度是 L .河里有n块石头,这n块石头从河的一边笔直的连到另一边.青蛙只能踩着石头过河,如果它们掉到水里,将被淘汰出局.游戏规定青蛙最 ...
- NYOJ题目1048破门锁
-------------------------------------------------- 每个锁位上可能的数为5(正确的一个+上偏移的两个+下偏移的两个),所以总共可能性为: 但是这里面有 ...
最新文章
- [java]The String Pool
- 正则表达式的简单应用
- MySQL笔记10:engine=innodb和engine=myisam的区别和用法!
- Hibernate Validator用法
- linux虚拟内存当硬盘,linux里面虚拟内存和swap有什么不同?
- 阅读“CodeIgniter中国》文档首页》常规主题》安全”之抄录
- 3.0的USB,我们都用错了。
- Apache POI TXT转成EXCEL(XLSX)
- 统计机器学习-1-统计机器学习基础
- 在线文本比较工具-toolfk程序员在线工具网
- 证券secuerity英语
- 802.11协议精读1:学习资料整理
- 图解互联网云脑的前世今生与未来,十幅进化示意图
- java实现hdf5表数据的动态逐条追加
- apple iOS订阅开发-服务端
- 随机事件和概率及概率的性质
- 微积分(一)一般概念以及从圆的面积怎么来?
- 图像超分算法小合集二:FSRCNN、DRCN、RDN、EDSR
- VSCode的下载安装与配置教程(详细)
- linux下磁盘查看和分区
热门文章
- rtmp测试的地址(2022版)
- gige相机二次开发_海康威视工业相机SDK二次开发示例程序demo和PDF说明.zip
- 【数字基座·智慧物联】AIRIOT新品发布会在京举办
- 比较两张表的数据是否相同
- 大数据用户画像项目实战 ETL数据抽取
- linux系统怎么看raid,linux如何查看硬盘及raid信息
- 外国程序员发帖求助:快四十岁了,不知道以后该怎么办
- 分享83个ASP整站程序源码,总有一款适合您
- 文本编辑器 UltraEdit V27.10有全新的文件属性功能
- mysql下载、安装并用客户端工具Navicat进行连接教程