贪心算法之——过河问题(nyoj47)
问题:
过河问题
- 描述
-
在漆黑的夜里,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
分析:
当只有一个人时:时间s=a[0];
当人数为二:时间s=a[1];
当人数为三:时间s=a[0]+a[1]+a[2];
当人数为四:时间s=a[0]+a[2]>2*a[1] ? a[0]+3*a[1]+a[3] : 2*a[0]+a[1]+a[2]+a[3];(如:一:1,2,5,10;二:1,7,8,10)
我的代码:
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{int t;scanf("%d", &t);while(t--){int n, a[1005]={0};scanf("%d", &n);for(int i=0; i<n; i++){scanf("%d", &a[i]);}sort(a, a+n);if(n==1) printf("%d\n", a[0]);else if(n==2) printf("%d\n", a[1]);else if(n==3) printf("%d\n", a[0]+a[1]+a[2]);else if(n==4) printf("%d\n", 2*a[1]<a[0]+a[2] ? a[0]+3*a[1]+a[3] : 2*a[0]+a[1]+a[2]+a[3]);else {int s=0;for(int i=n-1; i>1; i-=2){if(i-1==2)//只剩4个人,所有人都过去{s += 2*a[1]<a[0]+a[i-1] ? a[0]+3*a[1]+a[i] : 2*a[0]+a[1]+a[i-1]+a[i];break;}if(i-1==1)//只剩3个人,所有人都过去{s += a[0]+a[1]+a[i];break;}/*此时剩余人数大于4,只需要通过最快的两个人(或一个人)把最后两个人送到对岸,然后自己返回接剩下的人*/ s += 2*a[1]<a[0]+a[i-1] ? a[0]+2*a[1]+a[i] : 2*a[0]+a[i-1]+a[i];}printf("%d\n", s);}}return 0;
}
贪心算法之——过河问题(nyoj47)相关推荐
- 多人过河问题C语言贪心算法,南阳oj贪心算法之过河问题
/** 过河问题 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的 ...
- 贪心算法——小船过河
题意:N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间.(船划过去要有一个人划回来) #include<iostrea ...
- 过河问题(贪心算法)(python)
过河问题(贪心算法) - CapitalAccumulation - 博客园 思路非常清晰 过河问题 一.问题描述 二.问题答案 三.扩展 四.问题推广 五.对于本题的最优选择: coding 一.问 ...
- 贪心算法实例(五):小船过河问题
N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间.(船划过去要有一个人划回来) 最优选择: 先将所有人过 ...
- 农夫过河——python贪心算法实现
1.问题描述: 一个农夫在河的西岸带了一匹狼.一只羊和一棵白菜,他需要把这三样东西用船带到河的东岸.然而,这艘船只能容下农夫本人和另外一样东西.如果农夫不在场的话,狼会吃掉羊,羊也会吃掉白菜. 2.问 ...
- 贪心算法----过河问题
问题: 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥 ...
- 多人过河问题C语言贪心算法,贪心算法----过河问题
问题: 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过.如果各自单独过桥 ...
- 贪心算法:小船过河问题
贪心算法:小船过河问题 题意:N个人过河,船每次只能坐两个人,船载每个人过河的所需时间不同t[i],每次过河的时间为船上的人的较慢的那个,问最快的过河时间.(船划过去要有一个人划回来) 最优选择: 先 ...
- 嵌入式必会!C语言最常用的贪心算法就这么被攻略了
01 基本概念 贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的 ...
最新文章
- 基于VMwareWorkstation技术预览版2012上的WinServer8测试版安装
- [转][自勉]程序员困境:底层编码能力正逐步丧失
- docker 配置加速器
- 释疑のABAP输入框字符自动变成大写问题
- 命名时取代基优先顺序_【选修五】高中化学重难点知识:有机物的命名方法
- rar x64 5.50 linux,WinRAR 5.50 简体中文正式版发布
- jeecg输入中文查询导表为空_简单查询
- JavaScript学习笔记 -- ES6学习(三) 变量的解构赋值
- Cloudera Certified Associate Administrator案例之Install篇
- POJ3617 Best Cow Line【水题】
- ipynb pycharm 运行_Mask RCNN代码之demo.ipynb运行与理解
- Ubuntu英语环境下完全显示文泉驿微米黑字体的字体配置文件
- nssa和stub_STUB与NSSA区域总结
- r 对一列计数_根据另一列对项目进行计数
- HTML超链接标签—链接QQ在线聊天
- nRF52832 BLE UART
- 如何使用NodeJS发送邮件
- 爬虫开发入门:使用 Pyspider 框架开发爬虫
- HTML网页设计:电影网站设计——电影我不是药神(4页) HTML+CSS+JavaScript
- 傅里叶实现高精度乘法
热门文章
- 【重磅】神策分析 1.13 版本上线 ,持续深耕打造场景化数据分析
- bootstrap checkbox选中事件
- The road to learning English-Listening
- Application Virtualization 4.5 部署之(三)(
- Ioc的推荐实现方式
- 在JavaScript文件中读取properties文件的方法
- 活久见的重构 - iOS 10 UserNotifications 框架解析
- 和我一起学《HTTP权威指南》——安全HTTP与HTTPS
- SegmentFault D-Day 北京:大数据
- Ubuntu 下 redmine 安装配置