过河问题

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 5
描述

在漆黑的夜里,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/23196933
ac代码

如果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 过河问题 (贪心)相关推荐

  1. 题目47:最大公约数

    http://ac.jobdu.com/problem.php?cid=1040&pid=46 题目描述: 输入两个正整数,求其最大公约数. 输入: 测试数据有多组,每组输入两个正整数. 输出 ...

  2. nyoj 691 青蛙过河

    题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=619 /// 这道题好像是青蛙过河,我也没有翻译,因为之前做过一个这样的题,就是一条河有 ...

  3. nyoj 题目5 Binary String Matching

    Binary String Matching 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 Given two strings A and B, whose alpha ...

  4. NYOJ - 独木舟上的旅行(贪心)

    http://nyoj.top/problem/71 内存限制:64MB 时间限制:3000ms 题目描述: 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两 ...

  5. 活动选择与小船过河问题(贪心算法)

    活动选择问题描述: 存在一个教室,有下面若干个活动需要安排在一天进行,活动之间不能重叠,如何安排活动使活动的数量最多? 活动序号 1 2 3 4 5 6 7 8 9 10 11  (活动已经按结束时间 ...

  6. 农夫过河——python贪心算法实现

    1.问题描述: 一个农夫在河的西岸带了一匹狼.一只羊和一棵白菜,他需要把这三样东西用船带到河的东岸.然而,这艘船只能容下农夫本人和另外一样东西.如果农夫不在场的话,狼会吃掉羊,羊也会吃掉白菜. 2.问 ...

  7. 过河问题----贪心

    题目描述: 过河 (20 分) 有N个人想要过一条河,但是他们只有一条最多载两人的船.因此必须想出一个调度船来回的方法让每个人都能过河.每个人都有自己的划船速度,且同一条船上的两个人取决于慢者的速度. ...

  8. 哈理工OJ-1584-青蛙过河【贪心+二分】

    青蛙王国一年一度的游戏又开始了,这个游戏要求青蛙必须跳过河.河的宽度是 L .河里有n块石头,这n块石头从河的一边笔直的连到另一边.青蛙只能踩着石头过河,如果它们掉到水里,将被淘汰出局.游戏规定青蛙最 ...

  9. NYOJ题目1048破门锁

    -------------------------------------------------- 每个锁位上可能的数为5(正确的一个+上偏移的两个+下偏移的两个),所以总共可能性为: 但是这里面有 ...

最新文章

  1. [java]The String Pool
  2. 正则表达式的简单应用
  3. MySQL笔记10:engine=innodb和engine=myisam的区别和用法!
  4. Hibernate Validator用法
  5. linux虚拟内存当硬盘,linux里面虚拟内存和swap有什么不同?
  6. 阅读“CodeIgniter中国》文档首页》常规主题》安全”之抄录
  7. 3.0的USB,我们都用错了。
  8. Apache POI TXT转成EXCEL(XLSX)
  9. 统计机器学习-1-统计机器学习基础
  10. 在线文本比较工具-toolfk程序员在线工具网
  11. 证券secuerity英语
  12. 802.11协议精读1:学习资料整理
  13. 图解互联网云脑的前世今生与未来,十幅进化示意图
  14. java实现hdf5表数据的动态逐条追加
  15. apple iOS订阅开发-服务端
  16. 随机事件和概率及概率的性质
  17. 微积分(一)一般概念以及从圆的面积怎么来?
  18. 图像超分算法小合集二:FSRCNN、DRCN、RDN、EDSR
  19. VSCode的下载安装与配置教程(详细)
  20. linux下磁盘查看和分区

热门文章

  1. rtmp测试的地址(2022版)
  2. gige相机二次开发_海康威视工业相机SDK二次开发示例程序demo和PDF说明.zip
  3. 【数字基座·智慧物联】AIRIOT新品发布会在京举办
  4. 比较两张表的数据是否相同
  5. 大数据用户画像项目实战 ETL数据抽取
  6. linux系统怎么看raid,linux如何查看硬盘及raid信息
  7. 外国程序员发帖求助:快四十岁了,不知道以后该怎么办
  8. 分享83个ASP整站程序源码,总有一款适合您
  9. 文本编辑器 UltraEdit V27.10有全新的文件属性功能
  10. mysql下载、安装并用客户端工具Navicat进行连接教程