/**/
#include <iostream>
#include<algorithm>
using namespace std;
int calc1(int *a,int n)
{return a[1] + a[0] + a[n - 1] + a[1];//第一种算法
}
int calc2(int* a, int n)
{return a[n - 1] + a[0]+a[n-2]+a[0];//第二种算法
}
int main()
{int m, n,sumtime;cin >> m;for (int i = 0; i < m; i++){sumtime = 0;cin >> n;int* a = new int[n];for (int j = 0; j < n; j++){cin >> a[j];}sort(a, a + n-1);if (n == 1)sumtime = sumtime + a[0];//一种特殊情况,另外考虑,当n大于1时满足下面所有else{while (n > 2){if (calc1(a, n) < calc2(a, n)){sumtime = sumtime + calc1(a, n);n = n - 2;}else{sumtime = sumtime + calc2(a, n);n = n - 2;}}if (n == 2)sumtime = sumtime + a[1];if (n == 1)sumtime = sumtime - a[0];//因为多算了一次最快的}cout << sumtime << endl;}
}

题目:

A group of N people wishes to go across a river with only one boat, which can at most carry two persons. Therefore some sort of shuttle arrangement must be arranged in order to row the boat back and forth so that all people may cross. Each person has a different rowing speed; the speed of a couple is determined by the speed of the slower one. Your job is to determine a strategy that minimizes the time for these people to get across.

Input

The first line of the input contains a single integer T (1 <= T <= 20), the number of test cases. Then T cases follow. The first line of each case contains N, and the second line contains N integers giving the time for each people to cross the river. Each case is preceded by a blank line. There won't be more than 1000 people and nobody takes more than 100 seconds to cross.

Output

For each test case, print a line containing the total number of seconds required for all the N people to cross the river.

Sample

Inputcopy Outputcopy
1
4
1 2 5 10
17

题目大意:有N个人和一艘船,这个船最多载两个人。这N个人需要到对岸去,每个人都有一个不同的划船速度,当两个人一起划船时 速度取决于慢的那个人。求将所有人运到对岸所需要最短的时间。

方案一,也是最容易想到的:最快的人不断划船运输其他所有人。对a[n]进行排序后,可以知道一轮时间为a[0]+a[n-1]。

方案二:两轮一记。最快的两个人先到对岸后,最快的人回来。然后最慢的两个人到对岸后,次快的人回来。

由此举一反三,可以知道,当这个船可以载三个人时,方案有三个,可以载n个人时,方案有N个,每N轮对每种可能的坐船组合进行比较,可以得出最佳的答案。

最后需要考虑余数的情况。

贪心算法-crossing river相关推荐

  1. 信息学奥赛第十节 —— 贪心算法(渡河问题POJ 1700 Crossing River + 拦截导弹的系统数量求解)

    复习概念 贪心算法又叫贪婪算法,是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,贪心算法不从整体最优上加以考虑,它所做出的是在某种意义上的局部最优解. 无后效性:贪心算法不是对所有问题都 ...

  2. 信息学奥赛一本通(1232:Crossing River)

    1232:Crossing River 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 6415     通过数: 2761 [题目描述] 几个人过河,每次过两人一 ...

  3. 信息学奥赛一本通 1232:Crossing River | OpenJudge NOI 4.6 702:Crossing River

    [题目链接] ybt 1232:Crossing River OpenJudge NOI 4.6 702:Crossing River 一本通里的翻译不够完整,OpenJudge中的英文原题中有对数据 ...

  4. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  5. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  6. 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码

    1. 贪心算法概览 贪心算法是一种算法思想.希望能够满足限制的情况下将期望值最大化.比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树 等问题都希望满足限制的情况下用 ...

  7. 一份贪心算法区间调度问题解法攻略,拿走不谢

    作者 | labuladong 来源 | labuladong(ID:labuladong) [导读]什么是贪心算法呢?贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多 ...

  8. 漫画:五分钟学会贪心算法!

    假设一个问题比较复杂,暂时找不到全局最优解,那么我们可以考虑把原问题拆成几个小问题(分而治之思想),分别求每个小问题的最优解,再把这些"局部最优解"叠起来,就"当作&qu ...

  9. 下载插件(贪心算法)

    小扣打算给自己的 VS code 安装使用插件,初始状态下带宽每分钟可以完成 1 个插件的下载.假定每分钟选择以下两种策略之一: 使用当前带宽下载插件 将带宽加倍(下载插件数量随之加倍) 请返回小扣完 ...

最新文章

  1. 高精度运算(C++实现)
  2. 【经验分享】如何优雅的在 Microsoft word中插入代码
  3. (转自scrum中文网)给Scrum Master的十个建议,你值得拥有
  4. 用Java递增Map值的最有效方法–仅搜索一次键
  5. Ubuntu安装之python开发
  6. Android——Ubuntu android NDK 配置
  7. Drools集成SpringBoot
  8. 2017.9.24 三色二叉树 思考记录
  9. 4个不错的Flash开源项目
  10. C++中的config设计
  11. final修饰的对象咋办?
  12. vim user-manual的笔记 Chapter1
  13. Trying to create too many scroll contexts. Must be less than or equal to: [500]
  14. 特殊IP地址分类:私有地址、保留地址
  15. 企业数据总线(ESB)和注册服务管理(dubbo)的区别
  16. 定时器 java qua_kettle整合到web项目并运用quartz实现定时任务
  17. 机器人演示demo_令人印象深刻的WebGL演示
  18. 重构 - 提炼函数,消除重复代码
  19. 3D视觉|了解下工业上常见的3D相机
  20. 情人节程序员用HTML网页表白【烟花代码】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript

热门文章

  1. Mysql之视图(无通过视图更新数据表)
  2. 微软全球执行副总裁--陆奇博士
  3. 100条养生常识,比黄金还值钱!快转给朋友看看!
  4. 董事长、总裁与CEO的区别与实质
  5. JAVA毕设项目临时停车收费系统(java+VUE+Mybatis+Maven+Mysql)
  6. 计算机操作系统的工作原理英文,计算机操作系统原理分析
  7. van-area组件的封装
  8. 使用Echart报错Cannot read property ‘getAttribute‘ of undefined
  9. 爬取京东评论并制作词云图
  10. Unity API-----Renderer(渲染器)