以前并没有发现微积分教材上有这种东西...我还是太菜了...

其实就是要在满足$\sum\limits_{i=1}^nk_is_i(v_i-v_i')^2\leq E$的同时求$\sum\limits_{i=1}^n\dfrac{s_i}{v_i}$的最小值

首先我们要跑得尽可能快,所以$v_i\geq v_i'$,而且在最优解体能是一定会被用完的,那么限制就变成等式了

拉格朗日乘数法可用于求多元函数的带限制极值:$g(x_1,\cdots,x_n)=0$,求$f(x_1,\cdots,x_n)$的极值

我看的书上有一个挺好的几何解释:把$f$的图像画出来,再在上面画一些“等高线”,同时把$g(x_1,\cdots,x_n)=0$和$f(x_1,\cdots,x_n)$的“交线”画出来,那么取到极值的地方就是等高线与交线相切的地方

比如说求$f(x,y)=x^2+y^2+2$在限制$g(x,y)=x^2+\dfrac14y^2-1=0$下的极值,三张图一目了然

黄色:$z=f(x,y)$,红色:$g(x,y)=0$

$z=2$

$z=6$

相切意味着梯度线性相关,即是说如果在$x_i=t_i$处$f$取得极值,那么$\nabla f(t_1,\cdots,t_n)=\lambda\nabla g(t_1,\cdots,t_n)$,我们把它拆分成关于每个变量的偏导,即对于$\forall1\leq i\leq n$有$\left.\dfrac{\partial f}{\partial x_i}\right|_{x_i=t_i}=\lambda\left.\dfrac{\partial g}{\partial x_i}\right|_{x_i=t_i}$

再加上$g(t_1,\cdots,t_n)=0$,总共$n+1$个变量和$n+1$条方程,可以解出来

再看这道题,限制条件是$\sum\limits_{i=1}^nk_is_i(v_i-v_i')^2-E=0$,我们要求$\sum\limits_{i=1}^n\dfrac{s_i}{v_i}$的极值,所以有方程$-\dfrac1{v_i^2}=2\lambda k_i(v_i-v_i')$,首先这说明$\lambda\lt0$,方程左边是经过三四象限的类双曲线,右边是斜率为负的经过第一象限的直线,所以当$\lambda$确定后有且只有一个$v_i$满足方程,并且因为$\lambda$越大,$v_i$也越大,这直接导致了$\sum\limits_{i=1}^nk_is_i(v_i-v_i')^2$变大,所以我们可以二分出满足关于$E$的限制的$\lambda$,在这个过程中求$v_i$也是可以二分的,于是我们就愉悦地做完了这题

注意精度...

  1. #include<stdio.h>
  2. typedef double du;
  3. const du eps=1e-14,inf=1e9;
  4. du s[10010],k[10010],v[10010];
  5. int n;
  6. du sqr(du x){return x*x;}
  7. du calc(int i,du lm){
  8. du l,r,mid;
  9. l=eps;
  10. r=inf;
  11. while(r-l>eps){
  12. mid=(l+r)*.5;
  13. if(-1<2*lm*k[i]*(mid-v[i])*sqr(mid))
  14. l=mid;
  15. else
  16. r=mid;
  17. }
  18. return mid;
  19. }
  20. du check(du lm){
  21. int i;
  22. du r=0;
  23. for(i=1;i<=n;i++)r+=k[i]*s[i]*sqr(calc(i,lm)-v[i]);
  24. return r;
  25. }
  26. int main(){
  27. int i;
  28. du E,l,r,mid,ans;
  29. scanf("%d%lf",&n,&E);
  30. for(i=1;i<=n;i++)scanf("%lf%lf%lf",s+i,k+i,v+i);
  31. l=-inf;
  32. r=-eps;
  33. while(r-l>eps){
  34. mid=(l+r)*.5;
  35. if(check(mid)<E)
  36. l=mid;
  37. else
  38. r=mid;
  39. }
  40. ans=0;
  41. for(i=1;i<=n;i++)ans+=s[i]/calc(i,mid);
  42. printf("%.10lf",ans);
  43. }

[BZOJ2876]骑行川藏的更多相关文章

  1. 【BZOJ2876】【NOI2012】骑行川藏(数学,二分答案)

    [BZOJ2876][NOI2012]骑行川藏(数学,二分答案) 题面 BZOJ 题解 我们有一个很有趣的思路. 首先我们给每条边随意的赋一个初值. 当然了,这个初值不会比这条边的风速小. 那么,我们 ...

  2. bzoj 2876: [Noi2012]骑行川藏 拉格朗日数乘

    2876: [Noi2012]骑行川藏 Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1033  Solved: ...

  3. 高等数学(拉格朗日乘子法):NOI 2012 骑行川藏

    [NOI2012] 骑行川藏 输入文件:bicycling.in   输出文件:bicycling.out   评测插件 时间限制:1 s   内存限制:128 MB NOI2012 Day1 Des ...

  4. BZOJ 2876 【NOI2012】 骑行川藏

    题目链接:骑行川藏 听说这道题需要一些高数知识 于是膜了一发dalao的题解……然后就没了…… 不要吐槽我的精度TAT……eps设太小了就TLE,大了就Wa……我二分的边界是对着数据卡的…… 下面贴代 ...

  5. 「NOI2012」骑行川藏

    「NOI2012」骑行川藏 题目描述 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨. 川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的 ...

  6. bzoj2876 [Noi2012]骑行川藏

    Description 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨.川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的体力十分有限,因 ...

  7. bzoj2876 [NOI2012]骑行川藏(拉格朗日乘数法)

    题目描述 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨.川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的体力十分有限,因此在每天的骑行 ...

  8. 2876: [Noi2012]骑行川藏 - BZOJ

    Description 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨.川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的体力十分有限,因 ...

  9. 【NOI2012】骑行川藏

    获得成就:第一次在信竞做神仙数学题 先放个前言,$OI$ 出大型数学题还是比较麻烦的,因为主要是考你数学推导 / 手算式子,你算出来之后把公式套个板子,就得到结论——$OI$ 的大型数学题的代码都是板 ...

随机推荐

  1. HDU1054 Strategic Game(最小点覆盖)

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. java的URI和URL到底是什么

    在我们做开发时,经常有URI和URL弄混的问题,如果当时直接看URI和URL的源码就不可能弄混.首先我总结一下URI和URL的关系:他们的关系是:URL是一种特殊的URI,是URI包括URL, 下面用 ...

  3. bzoj 2426 【HAOI2010】工程选址 贪心

    [HAOI2010]工厂选址 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 447  Solved: 308[Submit][Status][Disc ...

  4. tomcat 配置文件中设置JAVA_HOME

    Tomcat默认情况下会用系统的环境变量中找到JAVA_HOME和JRE_HOME.但是有的时候我们需要不同版本的JDK共存. 可以在${TOMCAT_HOME}/bin/setclasspath.b ...

  5. css实现九宫格图片自适应布局

    我之前写九宫格自适应布局的时候,每个格子是使用媒体查询器(@media)或者js动态设置css,根据不同的手机屏幕宽度,适配不同手机,但是这样有个很大的缺点,那就是移动端的屏幕尺寸太多了,就得写很多代 ...

  6. CORS服务端跨域

    跨域,通常情况下是说在两个不通过的域名下面无法进行正常的通信,或者说是无法获取其他域名下面的数据,这个主要的原因是,浏览器出于安全问题的考虑,采用了同源策略,通过浏览器对JS的限制,防止恶意用户获取非 ...

  7. JavaBean定义、JSP中使用以及内省操作

        Apache commons 一系列的开源工具室非常值得学习的实现. 一 JavaBean定义     JavaBean是一种可重复使用.且跨平台的软件组件.JavaBean可分为两种:一种是 ...

  8. HIT 1917 2—SAT

    题目大意:一国有n个党派,每个党派在议会中都有2个代表, 现要组建和平委员会,要从每个党派在议会的代表中选出1人,一共n人组成和平委员会. 已知有一些代表之间存在仇恨,也就是说他们不能同时被选为和平委 ...

  9. 标签 JLable 类

    标签JLable上可以添加图像,当鼠标停留在标签上时,可以显示一段提示文字. package first; import javax.swing.*; import java.awt.*; impor ...

  10. UVALIVE 5096 Volume

    This time your job is to calculate the volume of a special object. The object consists of two orthog ...