题目描述

在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,N人所需要的时间已知;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这N人尽快过桥。

输入

第一行是一个整数N(1<=N<=1000)表示共有N个人要过河。第二行是N个整数Si,表示此人过河所需要花时间。(0<Si<=100)

输出

输出所有人都过河需要用的最少时间

样例输入

4
1 2 5 10

样例输出

17

思路:该题的解法采用了贪心的思想,虽然代码十分简短,但是思维量却很大(对本蒻鶸来说),所以很不知羞耻的去网上寻找了该题的解法。

但是想要明白这个证明的前提是能够理解2种方案的由来,对于智商硬伤的我来说大概只能感慨一声 好厉害。

第一种方案很好想,每次都由最小花费来实现接送。

第二种方案 用最小花费和次小花费实现最大花费和次大花费的运输。

而这2种方案都不一定是最优解,他们都是在(T1+T3)-2T2条件下实现的分布最优解。

证明:由特殊到一般的数学证明

所以整个过程都可以转化成关于最小.次小与当前最大 的关系判断问题。

代码如下:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<string>
#include<queue>
#include<stdlib.h>
#include<math.h>
#define per(i,a,b) for(int i=a;i<=b;++i)
#define rep(i,a,b) for(int i=a;i>=b;--i)
#define inf 0xf3f3f3f
using namespace std;
int p[1005],a[1005];
int main()
{int n;scanf("%d",&n);per(i,1,n) scanf("%d",&a[i]);sort(a+1,a+n+1);p[1]=a[1];p[2]=a[2];per(i,3,n) p[i]=min(p[i-1]+a[1]+a[i],p[i-2]+a[1]+2*a[2]+a[i]);printf("%d",p[n]);
}
}

过河问题(经典贪心)相关推荐

  1. 过河问题(贪心算法)(python)

    过河问题(贪心算法) - CapitalAccumulation - 博客园 思路非常清晰 过河问题 一.问题描述 二.问题答案 三.扩展 四.问题推广 五.对于本题的最优选择: coding 一.问 ...

  2. 【经典贪心练习】金银岛

    [贪心练习]金银岛 哈喽,大家好,我是赏月君,今天做一下经典贪心算法的题目--金银岛,废话少说,上题目. 题目描述 某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝 ...

  3. leetcode:55. 跳跃游戏【经典贪心】

    分析 维护当前走到的位置,以及当前能走的最大区间内下一次走到的最远位置maxPos 当前能走的位置就是[cur, maxPos]但是在走的过程中,边走边看下一次的maxPos,然后当cur走到上一个m ...

  4. 【UVA - 10037】Bridge(过河问题,经典贪心)

    题干: 题目大意: 有N个人要过桥,每个人速度不同,只有一个手电筒,每次最多只能过去两个人,问所有人最短的过桥时间为多少 解题报告: 首先让最快的两个人最后过,然后我们分奇偶考虑,分别处理到剩下三个人 ...

  5. POJ 1700 经典过河问题(贪心)

    POJ题目链接:http://poj.org/problem?id=1700 N个人过河,船每次最多只能坐两个人,船载每个人过河的所需时间不同,问最快的过河时间. 思路: 当时所需要的最小时间很容易求 ...

  6. P1031 均分纸牌(经典贪心)

    题目描述 有N堆纸牌,编号分别为1,2,-,N.每堆上有若干张,但纸牌总数必为N的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为1堆上取的纸牌,只能移到编号为2的堆上:在编号为N的 ...

  7. NYOJ-14 会场安排问题(经典贪心,区间完全不覆盖模板)

    附另一:此类问题选题总结:https://blog.csdn.net/qq_41289920/article/details/81001357 题干: 会场安排问题 时间限制:3000 ms | 内存 ...

  8. 野人与传教士过河java_传教士和野人过河(经典MC问题)

    这个问题本来是<人工智能技术导论>第三章的课后题,今天上午考试正巧考到了这道题,要我们画状态转换图,我之前思考过一点,所以写出的状态表示应该没有问题,但这些状态太多了.......,十来种 ...

  9. C语言经典贪心算法之加油站问题(详解)

    文章目录 一.贪心算法 二.加油站问题 一.贪心算法 贪心算法暗示一种不追求最优解,只希望找到较为满意解的方法.贪心算法省去了为找最优解要穷尽所有可能而必须耗费大量时间,因此它一般可以快速得到较为满意 ...

最新文章

  1. ANT无线通信技术(2) 通道配置
  2. android ART编译预优化
  3. 安装Node.js和npm
  4. 软件测试人员的核心竞争力
  5. vector中resize和reserve接口的异同
  6. UML类图(上):类、继承和实现
  7. delphi 字符串占用空间_字符串在Python内部是如何省内存的
  8. 使用“Grafeas”元数据API和“Kritis”部署授权管理软件供应链
  9. 图解设计模式-State模式
  10. 安装docker 17.03.2.ce教程
  11. EasyAr聚焦模式
  12. 定义方法-求矩形的面积
  13. IDEA社区版tomcat配置教程
  14. 来自一枚初生牛犊不怕虎的小菜鸟的Mock.js使用,不足之处欢迎读者的指出 谢谢...
  15. Office/Visio卸载残留或版本冲突导致无法安装问题的解决办法
  16. 认识Android应用开发(一)
  17. 【BZOJ4864】[BeiJing 2017 Wc]神秘物质 Splay
  18. python pandas拆分单元格
  19. 《善数者成:大数据改变中国》读书笔记2
  20. [转]SQL Server 数据库规范

热门文章

  1. LeetCode题解-1710.卡车上的最大单元数
  2. Python获取代理池和提取可用IP
  3. 车易加:今日油价|油价上涨10元/吨,油价又要重新上涨?
  4. CSDN写博客去除上传图片的水印
  5. 保定市计算机高中学校排名,保定高中哪个学校最好?2020最新保定市初中排名
  6. V3D中神经元SWC颜色对照图及色彩搭配
  7. LeetCode 286 Walls and Gates
  8. python开发工具PyCharm最新版本新增功能介绍
  9. 如何用python做考勤_【python爬虫教程 考勤】如何用Python实现一只小爬虫,爬取拉勾网...
  10. 强制删除鲁大师所有文件