NYOJ_47 过河问题,贪心选择
来源:互联网 发布:not在vb中 编辑:程序博客网 时间:2024/05/01 05:38
http://acm.nyist.net/JudgeOnline/problem.php?pid=47
在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,N人所需要的时间已知;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这N人尽快过桥。
思路:按耗时排序后,每次先让最快的两个人AB过去,回来一个A,让这边最慢的两个人过去,回来B,这样方案形成的格局就是剩下的人耗时最少,传递手电筒耗时也是最少,如此循环,直到剩余小于4个人。
提交后结果WA了,少考虑情况了,比如最快的AB,B却比A慢得多,这样就不如两次都让A传递手电筒。
参考了这里才发现这点的
分析:每一轮让最快的两个人先过桥,最快的一个人拿手电回来,然后这边最慢的两人先过去,桥那边最快的一个人回来类推
补充:其实还没有考虑完全,比如 下面一个例子:1,5, 7, 12
按上面的方面,当7, 12到对面共花了23
但是如果1带7过去,1 回带12过去,1回,确只用了21
#include<cstdio>#include<algorithm>using namespace std;int mintime(int n,int *a){ sort(a,a+n); int res=0; --n; while(n>2) { res+=min(a[0]+a[1]*2+a[n],a[0]*2+a[n]+a[n-1]); n-=2; } if(n==0) res+=a[0]; else if(n==1) res+=a[1]; else res+=a[0]+a[1]+a[2]; return res;}int main(){ int i,n,t,a[1001]; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=0;i<n;++i) scanf("%d",&a[i]); printf("%d\n",mintime(n,a)); } return 0;}
- NYOJ_47 过河问题,贪心选择
- nyoj_47 过河问题
- 贪心问题--过河问题
- 【贪心DP】过河问题
- 过河问题 NYOJ 贪心
- poj1700过河问题(贪心)
- 贪心-nyoj-过河问题
- NYOJ45:过河问题【贪心】
- nyoj 过河问题 贪心
- 贪心过河问题
- 贪心算法--过河问题
- nyoj 47 过河 过河问题 【贪心】
- HOJ 1262 贪心 ------ 过河问题
- 智力+贪心的过河问题
- POJ-1700 过河问题【贪心】
- poj1700 过河问题---贪心算法
- nyoj47过河问题(贪心)
- SDUT2868_n人过河问题(贪心)
- 未指定排序条件时,各种数据库取前十行记录
- 网速计算
- 我常用的几个第三方 Python 库
- substring 函数
- Hadoop集群配置
- NYOJ_47 过河问题,贪心选择
- mysql后门
- msm7k平台BT蓝牙驱动移植
- ubuntu下使用终端设置网络代理
- 2012_02_07
- 工作环境
- Tomcat下使用war包发布项目
- uid,gid,euid,egid,sgid解析
- framebuffer 简介