POJ1700 【经典过河问题,贪心】
2016-07-27 00:14
232 查看
题意:
n个人过河,
船每次只能坐两个人,
然后船载每个人过河的所需时间不同,
问最快的过河时间。
思路:
仅仅启发一下思维:
我相信很多人一下子的想法就会有,每次最快和那些慢的过去,然后让最快一直来回,最后全部到对岸。
但是还有一种情况,我说说看,弱仅仅是想给大家一点思考,毕竟有意思。
你先让两个快的人从A过去至B,然后挑一个人回来至A,留下一个快的在B。OK,回来以后我让两个最慢的过去至B,然后让B那边的快的过来接A这边的快的。这样会不会节约一点啊。
OK.
我们假设只有四个人,tf(the fast最快),sf(second fast次快),sm(second man次慢),tm(the manst最慢)。OK.
第一种情况:
tf兜来兜去的case:
tf+tm–>
<–tf
tf+sm–>
<–tf
tf+sf–>
第二种情况:
tf+sf–>
<–sf
tm+sm–>
<–tf
tf+sf–>
然后各类的时间消掉,会得出两种方案的最终比较:2*sf和tf+sm的比较;
很好玩的东西吧,那么根据我们的想法,这样子的话,写法就是每次带走两个人直接比较那两个值就好了,然后小的按照小的方案走,最后会留下,肯定是在A留下的,3,2,还是1个。这个就自己考虑了。
code……………..
n个人过河,
船每次只能坐两个人,
然后船载每个人过河的所需时间不同,
问最快的过河时间。
思路:
仅仅启发一下思维:
我相信很多人一下子的想法就会有,每次最快和那些慢的过去,然后让最快一直来回,最后全部到对岸。
但是还有一种情况,我说说看,弱仅仅是想给大家一点思考,毕竟有意思。
你先让两个快的人从A过去至B,然后挑一个人回来至A,留下一个快的在B。OK,回来以后我让两个最慢的过去至B,然后让B那边的快的过来接A这边的快的。这样会不会节约一点啊。
OK.
我们假设只有四个人,tf(the fast最快),sf(second fast次快),sm(second man次慢),tm(the manst最慢)。OK.
第一种情况:
tf兜来兜去的case:
tf+tm–>
<–tf
tf+sm–>
<–tf
tf+sf–>
第二种情况:
tf+sf–>
<–sf
tm+sm–>
<–tf
tf+sf–>
然后各类的时间消掉,会得出两种方案的最终比较:2*sf和tf+sm的比较;
很好玩的东西吧,那么根据我们的想法,这样子的话,写法就是每次带走两个人直接比较那两个值就好了,然后小的按照小的方案走,最后会留下,肯定是在A留下的,3,2,还是1个。这个就自己考虑了。
code……………..
//#include<bits/stdc++.h> #include<cstdio> #include<math.h> #include<string.h> #include<algorithm> using namespace std; typedef long long LL; typedef unsigned long long ULL; const int eps=1e-9; const int pi=acos(-1.0); const int mod=1e8+7; const int INF=0x3f3f3f3f; const int N=1e3+10; int a ; int main() { int n,t,i; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a,a+n); int sum=0; for(i=n;i>3;i-=2){ //每次带两个人过去 if(2*a[2]>a[1]+a[i-1]){ sum+=2*a[1]+a[i]+a[i-1]; } else sum+=2*a[2]+a[i]+a[1]; } if(i==3) sum+=a[1]+a[2]+a[3]; else if(i==2) sum+=a[2]; else sum+=a[1]; printf("%d\n",sum); } }
相关文章推荐
- L3总线接口
- 进程通信----共享内存以及mmap函数实现共享内存
- Mac OS添加tree命令
- HDU 5744 Keep On Movin (贪心)
- http://www.sunhaojie.com/2016/02/13/java%e5%9f%ba%e7%a1%80%e6%95%99%e7%a8%8b%e7%ac%ac%e5%8d%81%e4%b8%89%e7%ab%a0-java%e5%a4%9a%e7%ba%bf%e7%a8%8b/
- redis cluster
- QT实现类似QQ的截图功能
- Codeforces Round #321 (Div. 2)【A 最长不减子串】【B tow-pointer】【C dfs】【D 状压DP】
- Beat
- 深拷贝、浅拷贝、对象引用概念
- 4.【Hard】LRU Cache--Time Limit Exceeded
- django中@property装饰器的运用
- Memcached和Redis数据缓存系统
- App分组排序实现
- 暑假集训二顺序表-顺序表应用2:多余元素删除之建表算法
- sdut oj3325 顺序表应用2:多余元素删除之建表算法
- Java 深入理解与感悟
- 阻塞信号和捕捉信号
- 闭包的理解
- (转) Deep Reinforcement Learning: Pong from Pixels