摘要: 题意:给出两条平行的线段AB, CD,然后一个人在线段AB的A点出发,走向D点,其中,人在线段AB上的速度为P, 在线段CD上的速度为Q,在其他地方的速度为R,求人从A点到D点的最短时间。分析:居然要用三分,哎,怎么也没想到,先在AB上三分,固定一个点,接着在CD上三分,就是嵌套的三分搜索,思路清晰的话,代码也不是很难敲注意精度还有边界的处理View Code #include<iostream>#include<algorithm>#include<math.h>using namespace std;struct point{ double x,y;}; 阅读全文
posted @ 2012-02-12 21:09 枕边梦 阅读(292) 评论(0) 推荐(0) 编辑
摘要: hdu3756题意:在一个三维空间里,已知有N个点,求一个最小的圆锥使所有的点都包含其中。分析:主要有俩个步骤,首先就是将三维空间转化为二维空间,将所有的点都转化都同一个平面内考虑,通过将(X,Y,Z) 转化为(sqrt(x*x+y*y),Z),问题就转化为求一条直线将第一象限内的点全部包围起来。即,求满足条件的h,r 使得 h*r*r最小对于单调函数的表达式,我们可以采用二分搜索,但对于这种凸函数或凹函数求极值,我们可以采用三分搜索,给定h的上下限,三分h搜索即可。这里有三分搜索的介绍,挺不错的http://www.crazyhotice.com/2011/07/%E4%B8%89%E5%8 阅读全文
posted @ 2012-02-12 16:06 枕边梦 阅读(632) 评论(0) 推荐(0) 编辑
摘要: 很明显的二分搜索,注意一下精度就OK了我所知道的二分有俩种写法,注意一下循环的控制其一#include<iostream>#include<algorithm>#include<math.h>using namespace std;double cal(double x){ return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6;}int main(){ double y; int T; scanf("%d",&T); while(T--) { scanf("%lf",&y); if( 阅读全文
posted @ 2012-02-12 02:26 枕边梦 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 某种排序下的01背包,直接01背包肯定是错的,因为题目加了一些限制,需按q-p 从小到大将物品排序,至于为什么还是不清楚View Code #include<iostream>#include<algorithm>using namespace std;int dp[5005];struct good{ int p,q,v;}g[505];bool cmp(good a,good b){ return a.q-a.p<b.q-b.p;}int main(){ int n,m; while(scanf("%d %d",&n,&m) 阅读全文
posted @ 2012-02-12 01:31 枕边梦 阅读(245) 评论(0) 推荐(0) 编辑