47-过河问题

内存限制:64MB
时间限制:1000ms
Special Judge: No

accepted:2
submit: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

分析:
  1、只要我们能够保证每一步都取到时间最短的结果,那么最后得到的结果一定是耗时最短的
  2、有两种走的方法
    ①、由耗时最短的带耗时最长的
    ②、用耗时最长的带耗时第二长的(当然,我们需要一个耗时最短的两个人去带电灯回来) 核心代码:
  
 int a = A[n-] + A[n-] + A[] + A[];
int b = A[n-] + A[] + A[] + A[];
int c = min(a, b);

C/C++代码实现(AC):

 #include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <stack>
#include <map>
#include <queue>
#include <set> using namespace std;
const int MAXN = ; int main()
{
int t;
scanf("%d", &t);
while(t --)
{
int n, A[MAXN];
scanf("%d", &n);
for(int i = ; i < n; ++ i)
scanf("%d", &A[i]); sort(A, A+n, less<int>());
if (n <= )
{
printf("%d\n", A[n-]);
continue;
}
if (n == )
{
printf("%d\n", A[] + A[] + A[]);
continue;
}
int cnt = A[];
while(n > )
{
int a = A[n-] + A[n-] + A[] + A[];
// 最后两位耗时多的全部让第一号来送
int b = A[n-] + A[] + A[] + A[];
// 让最前面两个先走,再让第二个带灯回来,让后两个一起走,最后再让最先过来的第一号带灯回来 int c = min (a, b); // 选取耗时最短的策略
cnt += c;
n -= ;
if (n == )
cnt += A[] + A[];
}
printf("%d\n", cnt);
}
return ;
}

nyoj 47-过河问题 (贪心)的更多相关文章

  1. nyoj 47——过河问题——————【贪心】

    过河问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的 ...

  2. NYOJ 47过河问题

    主要思路:先排序.有两种可能是最小的情况,一种是让最小的去带着最大的过去,然后最小的再回来,还有一种就是先最小的和第二小的一块过去, 然后最小的回来,让最大的和第二大的过去,接着第二小的回来,第二小和 ...

  3. nyist 47 过河问题

    http://acm.nyist.net/JudgeOnline/problem.php?pid=47 过河问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 在漆 ...

  4. NYOJ 47:过河问题(思维)

    47-过河问题 内存限制:64MB 时间限制:1000ms 特判: No 通过数:6 提交数:10 难度:5 题目描述: 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话 ...

  5. NYOJ 47 河问题

    时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描写叙述 在漆黑的夜里,N位旅行者来到了一座狭窄并且没有护栏的桥边.假设不借助手电筒的话,大家是不管怎样也不敢过桥去的.不幸的是 ...

  6. nyoj 47 江 河问题 【贪婪】

    经典的贪婪. 两种方案:一个:让我们来最快,第二快,在过去的第一,最快的回.然后最慢,最慢第二,在过去.次最快的回来a[0]+a[1]+a[1]+a[n-1] 二:最快的和最慢的过去,最快的回来,最快 ...

  7. [nyoj]会场安排问题-贪心

    会场安排问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工 ...

  8. NYOJ 203 三国志(Dijkstra+贪心)

    三国志 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描写叙述 <三国志>是一款非常经典的经营策略类游戏.我们的小白同学是这款游戏的忠实玩家.如今他把游戏简化一下 ...

  9. nyoj 16-矩形嵌套(贪心 + 动态规划DP)

    16-矩形嵌套 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:13 submit:28 题目描述: 有n个矩形,每个矩形可以用a,b来描述,表示长和 ...

随机推荐

  1. 13.多级代理下Nginx透传真实IP

    1.基于代理(七层负载均衡)情况下 透传客户端的真实IP 环境: 10.0.0.5 proxy_node1 一级代理 10.0.0.6 proxy_node2 二级代理 10.0.0.7 proxy_ ...

  2. 本月16日SpringBoot2.2发布,有哪些变化先知晓

    本月(2019年10月16日)Spring Boot 2.2已经正式发布了!在此篇文章中,将给大家介绍一下2.2版为大家带来了哪些重要的新变化.笔者用心书写,希望阅读完成之后转发关注,你的支持是我不竭 ...

  3. 基于 HTML5 + WebGL 实现的垃圾分类系统

    前言 垃圾分类,一般是指按一定规定或标准将垃圾分类储存.分类投放和分类搬运,从而转变成公共资源的一系列活动的总称.分类的目的是提高垃圾的资源价值和经济价值,力争物尽其用.垃圾在分类储存阶段属于公众的私 ...

  4. 06 Node.js学习笔记之自动路由

    在以往客户端请求的文件,我们都得判断匹配才能返回相应的数据,其实我们可以设置一个自动路由,就可以不用每次去判断用户访问的是那个文件了 //1.载入http和fs模块 var http=require( ...

  5. Mutex vs Semaphore vs Monitor vs SemaphoreSlim

    C#开发者(面试者)都会遇到Mutex,Semaphore,Monitor,SemaphoreSlim这四个与锁相关的C#类型,本文期望以最简洁明了的方式阐述四种对象的区别. 线程安全 教条式理解 如 ...

  6. lamda和匿名内部类

    匿名内部类 匿名内部类在日常编程中还是经常会使用的.比如 ArrayList<String> list=new ArrayList<>(); list.add(new Stri ...

  7. 解析 Microsoft.Extensions.DependencyInjection 2.x 版本实现

    项目使用了 Microsoft.Extensions.DependencyInjection 2.x 版本,遇到第2次请求时非常高的内存占用情况,于是作了调查,本文对 3.0 版本仍然适用. 先说结论 ...

  8. 解决logback不打印mybatis的SQL日志的问题

    工作这么多年,今天还是因为Logback的这个问题稍微卡了一下,惭愧. 问题描述: logback配置了如下信息: <appender name="sql" class=&q ...

  9. Unity C#数据持久化与xml

    最近工作需要用到数据持久化,所以在此分享一下,通过查阅资料,数据持久化大体都是通过xml或者json来进行的.unity为我们自定义了数据持久化方法,但是比较局限,还需要自己来完成数据持久化方法. ( ...

  10. VMware问题--无法获得 VMCI 驱动程序的版本: 句柄无效

    关于VMware问题:无法获得 VMCI 驱动程序的版本: 句柄无效.驱动程序“vmci.sys”的版本不正确 问题截图: 解决 1.根据配置文件路径找到对应的.vmx文件: 2.用编辑器打开,找到v ...