快速渡河(贪心算法)
问题描述
有n的人需要过河,但只有一只船,且一次只能载两个人。每个人都有一个渡河的速度,过河的速度取决于速度最慢的那一个,求所有人过完河的最短时间。
输入一个n,表示有n个人。
接着输入n个整数表示每个人过河需要的时间。
例如:
4
1 2 5 10
输出:
17
思路:
有两种可以快速过河的策略,一是由最快的那个人把所有人带过河,二是由最快的和第二快的人先过去,然后最快的那个人再回来,当前最慢的两个人过去,第二快的那个人再回来,如此反复。这两种策略哪种为最优不是确定的,而是跟具体的过河速度有关,因此需要对局部进行判断,求局部最优解保证整体的最优(贪心算法的核心)。
代码实现:
#include<iostream>
#include<algorithm>
using namespace std;const int M=100;
int a[M];int fun(int arr[],int n)
{int left=n;int cnt=0;while(left>0){if(left==1) //只有一个人{cnt+=arr[0];break;}else if(left==2) //两个人{cnt+=arr[1];break;}else if(left==3) //三个人{cnt+=arr[1]+arr[0]+arr[2];break;}else{//1,2过去,1回来,当前最慢两个过去,2回来int x=arr[1]+arr[0]+arr[left-1]+arr[1];//1带当前最慢的两个人过去int x1=arr[left-2]+arr[0]+arr[left-1]+arr[0];cnt+=min(x,x1); //实现局部最优以达到整体最优left-=2; //一趟带走两个人}}return cnt;
}int main()
{int n;cin>>n;for(int i=0;i<n;i++)cin>>a[i];sort(a,a+n);//先对速度进行排序cout<<fun(a,n);return 0;
}
快速渡河(贪心算法)相关推荐
- 快速剖析贪心算法(C语言)
14天阅读挑战赛 努力是为了不平庸~ 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩:迟一天就多一天平庸的困扰. 学习日记 目录 学习日记 一.贪心算法 二.算法思路 三.算法特性 四.用贪心法 ...
- MATLAB可视化实战系列(二十八)-贪心算法求快速平方根倒数算法中的“魔术数字”【含matlab源代码】
前言 快速平方根倒数算法(Fast InvSqrt)是一种快速计算平方根的倒数的算法,常用于向量标准化运算,在光照渲染中有重要应用.此算法最早可能是于90年代前期由SGI所发明,后来于1999年在&l ...
- 信息学奥赛第十节 —— 贪心算法(渡河问题POJ 1700 Crossing River + 拦截导弹的系统数量求解)
复习概念 贪心算法又叫贪婪算法,是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,贪心算法不从整体最优上加以考虑,它所做出的是在某种意义上的局部最优解. 无后效性:贪心算法不是对所有问题都 ...
- poj1700快速渡河问题(贪心策略,详细解析)
二.快速渡河问题 翻译为中文 一队人(N个人)期望跨河,有一条船,一次只能载2个人,过河之后需要有一个人划回来,所有人才能够跨河,每个人划船速度都不同,两个人一组整体速度是由划船速度较慢的决定的.问题 ...
- 贪心算法----过河问题
问题: 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥 ...
- 多人过河问题C语言贪心算法,贪心算法----过河问题
问题: 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥 ...
- 三十六、贪心算法--集合覆盖问题
一.贪心算法介绍 1.贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 2.贪心算法不是对所有问题都 ...
- matlab求解集合覆盖问题,贪心算法实践之集合覆盖问题
介绍 贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法 贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解 ...
- 哈夫曼编码压缩率计算_程序员的算法课(8)-贪心算法:理解霍夫曼编码
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/ ...
最新文章
- Eclipse中导入第三方源码的问题和备用解决方案
- ASIHTTPRequest源码简单分析
- c# MEF框架(四 MEF高级进阶)
- for循环false 终止 python_python3.5.1给用户3次无效的尝试,然后终止pgm(Simple FOR循环)...
- android fragment学习6--FragmentTabHost底部布局
- hdu3076ssworld VS DDD 概率dp
- HttpClient详解
- CSDN积分获取规则
- c语言单循环赛制,循环赛日程安排问题(分治法)
- c# chart 各个属性_C# WINFORM项目Chart控件显示问题
- 系统win8 任务栏消失不见的解决办法
- 关于Bundle Adjustment的直观理解
- CSAPP实验二——bomb lab实验
- 世纪互联的那些人、那些年、那些事
- PHP实现文件上传功能实例代码
- 索引超出数组元素的数目(1)
- 关于vue中采用scoped时,组件的中css优先级
- 2113: 小飞的游戏
- 无能狂怒之“恢复VSCode按Enter键换行”问题
- 在虚拟机安装中Docker及一些基础命令