问题描述

有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;
}

快速渡河(贪心算法)相关推荐

  1. 快速剖析贪心算法(C语言)

    14天阅读挑战赛 努力是为了不平庸~ 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩:迟一天就多一天平庸的困扰. 学习日记 目录 学习日记 一.贪心算法 二.算法思路 三.算法特性 四.用贪心法 ...

  2. MATLAB可视化实战系列(二十八)-贪心算法求快速平方根倒数算法中的“魔术数字”【含matlab源代码】

    前言 快速平方根倒数算法(Fast InvSqrt)是一种快速计算平方根的倒数的算法,常用于向量标准化运算,在光照渲染中有重要应用.此算法最早可能是于90年代前期由SGI所发明,后来于1999年在&l ...

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

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

  4. poj1700快速渡河问题(贪心策略,详细解析)

    二.快速渡河问题 翻译为中文 一队人(N个人)期望跨河,有一条船,一次只能载2个人,过河之后需要有一个人划回来,所有人才能够跨河,每个人划船速度都不同,两个人一组整体速度是由划船速度较慢的决定的.问题 ...

  5. 贪心算法----过河问题

    问题: 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥 ...

  6. 多人过河问题C语言贪心算法,贪心算法----过河问题

    问题: 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥 ...

  7. 三十六、贪心算法--集合覆盖问题

    一.贪心算法介绍 1.贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 2.贪心算法不是对所有问题都 ...

  8. matlab求解集合覆盖问题,贪心算法实践之集合覆盖问题

    介绍 贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法 贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解 ...

  9. 哈夫曼编码压缩率计算_程序员的算法课(8)-贪心算法:理解霍夫曼编码

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/ ...

最新文章

  1. Eclipse中导入第三方源码的问题和备用解决方案
  2. ASIHTTPRequest源码简单分析
  3. c# MEF框架(四 MEF高级进阶)
  4. for循环false 终止 python_python3.5.1给用户3次无效的尝试,然后终止pgm(Simple FOR循环)...
  5. android fragment学习6--FragmentTabHost底部布局
  6. hdu3076ssworld VS DDD 概率dp
  7. HttpClient详解
  8. CSDN积分获取规则
  9. c语言单循环赛制,循环赛日程安排问题(分治法)
  10. c# chart 各个属性_C# WINFORM项目Chart控件显示问题
  11. 系统win8 任务栏消失不见的解决办法
  12. 关于Bundle Adjustment的直观理解
  13. CSAPP实验二——bomb lab实验
  14. 世纪互联的那些人、那些年、那些事
  15. PHP实现文件上传功能实例代码
  16. 索引超出数组元素的数目(1)
  17. 关于vue中采用scoped时,组件的中css优先级
  18. 2113: 小飞的游戏
  19. 无能狂怒之“恢复VSCode按Enter键换行”问题
  20. 在虚拟机安装中Docker及一些基础命令

热门文章

  1. 微信小程序使用 ECharts
  2. 周末了,看,首富出门遛狗。
  3. Win10磁盘管理器:轻松和安全地调整Win10的分区大小
  4. 【poj3311】Hie with the Pie
  5. MySQL教程——2 中级篇(索引、视图、存储过程)
  6. 2011的总结(感谢自己,感恩他人)【转自我的新浪博客】
  7. python南宁培训
  8. 嵌入式开发需要学mysql吗_学习嵌入式开发需要学习哪些课程?如何学习?
  9. 关于若依框架多级菜单的设置
  10. 初三毕业班主任压力过大割喉自尽