Wannafly模拟赛2 B river(拉格朗日乘数法)

本文探讨了在给定时间内,如何最大化从一组平行河流中游过的南北方向位移。通过拉格朗日乘数法找到最优的时间分配方案,并介绍了如何使用二分法求解导数值。

题目

  https://www.nowcoder.com/acm/contest/4/B
题意

  有n条南北流向的河并列排着,水流速度是v,现在你需要从西岸游到东岸,总共T个时间,你的游泳速度是u,问东岸的上岸点和西岸的下水点之间距离最大是多少?

分析

  其实就是求南北方向位移的最大值

  如果给定在一条河里的游泳时间,那么当然可以算出在这条河里的位移最大值

  具体的对于第i条河来说,将游泳速度u分成水平方向的$x$和竖直方向的$\sqrt{u^2-x^2}$

  那么容易整理出最大位移$f_i(t)=vt+\sqrt{u^2t^2-w_i^2}$

  这个问题最难的就是时间分配,即如何将T分配成$t_1,t_2,..,t_n$满足$t_1+t_2+...+t_n=T$,并且使得$S(t_1,t_2,..,t_n)=f_1(t_1)+f_2(t_2)+..+f_n(t_n)$最大

  这是一个多元函数求极值的问题,考虑拉格朗日乘数法

  构造拉格朗日函数$L(t_1,t_2,..,t_n,\lambda)=f_1(t_1)+f_2(t_2)+..+f_n(t_n)+\phi(t_1,t_2,..,t_n)$,其中$\phi(t_1,t_2,..,t_n)=t_1+t_2+...+t_n-T$

  只需要求这个L的各个偏导,令其为0就行了

  于是我们得到了重要的结论——${f_1}'(t_1)={f_2}'(t_2)=...={f_n}'(t_n)$

  我们可以去二分这个导数值mid,然后去反解$t_i$

  根据$\sum {t_i}$和$T$的大小来改变mid的值

  注意到能二分导数值反解$t_i$的情况当且仅当$f_i$是单调的,但${f_1}'(t_1)={f_2}'(t_2)=...={f_n}'(t_n)$这个性质却和函数表达式无关

转载于:https://www.cnblogs.com/wmrv587/p/7544422.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值