题目大意:一个人从(0,0)点出发,要到达(100×n,D)这个点。二维平面被分成了平行于x轴的n份,每一份的宽度都是n,每一份的材料不一样导致在每一份当中的速度不一样。求能到达终点的最短时间。
思路:拉格朗日乘法+二分。
思路来源 http://blog.csdn.net/iamzky/article/details/38150235
#define Double long double
Double s[maxn];
int v[maxn];
const int d=100;
int n;
Double cal(Double t){
Double res=0;
Double tmp=0;
for(int i=0;i<n;i++){
tmp=t*t/(Double)4.0*v[i]*v[i];
s[i]=(Double)sqrt(tmp+d*d);
res+=(Double)sqrt(tmp);
}
return res;
}
Double sol(){
int dd;
scanf("%d%d",&n,&dd);
memset(v,0,sizeof(v));
memset(s,0,sizeof(s));
for(int i=0;i<n;i++){
scanf("%d",&v[i]);
}
Double l=0,r=inf;
Double mid