http://www.lydsy.com/JudgeOnline/problem.php?id=2876 (题目链接)

题意

  在满足约束条件$${\sum_{i=1}^ns_ik_i(v_i-v_i')^2=E}$$

  求$${min\sum_{i=1}^n\frac{s_i}{v_i}}$$

Solution

  像这种形式的存在一个多元函数${g(v_1,v_2,v_3,······,v_n)=E}$的约束,求解多元函数${f(v_1,v_2,v_3,······,v_n)}$的最值,我们使用拉格朗日乘子法。

  在解这道题之前,我们要知道什么是偏导数,梯度向量,等高线等等一系列的东西。当然我是不知道的,只能靠自己YY了。如果这些你都知道了,那么你应该就会知道到当${f}$取到最值时,${f}$和${g}$的等高线相切→_→,既然它们的等高线相切,那么它们的梯度向量平行${\nabla f~//~\nabla g}$。

  梯度向量的每一维就是这个函数对应那一维的偏导数$${\nabla f=(\frac{\partial f}{\partial v_1},\frac{\partial f}{\partial v_2},\frac{\partial f}{\partial v_3}······,\frac{\partial f}{\partial v_n})}$$

  因为${f}$和${g}$的梯度向量平行,我们只要知道它们在哪一个点平行,我们就解出了${v_1···v_n}$。设${\nabla f=\lambda \nabla g}$,我们可以列出${n+1}$个等式。

$${\frac{\partial f}{\partial v_1}=\lambda \frac{\partial g}{\partial v_1}}$$

$${\frac{\partial f}{\partial v_2}=\lambda \frac{\partial g}{\partial v_2}}$$

$${\frac{\partial f}{\partial v_3}=\lambda \frac{\partial g}{\partial v_3}}$$

$${······}$$

$${\frac{\partial f}{\partial v_n}=\lambda \frac{\partial g}{\partial v_n}}$$

$${g(v_1,v_2,v_3,······,v_n)=E}$$

  求出偏导数代入。

$${-\frac{s_1}{v_1^2}=2\lambda k_1s_1(v_1-v_1')}$$

$${-\frac{s_2}{v_2^2}=2\lambda k_2s_2(v_2-v_2')}$$

$${-\frac{s_3}{v_3^2}=2\lambda k_3s_3(v_3-v_3')}$$

$${······}$$

$${-\frac{s_n}{v_n^2}=2\lambda k_ns_n(v_n-v_n')}$$

$${\sum_{i=1}^nk_i(v_i-v_i')^2s_i=E}$$

  化简一下。

$${2\lambda k_1v_1^2(v_1-v_1')=-1}$$

$${2\lambda k_2v_2^2(v_2-v_2')=-1}$$

$${2\lambda k_3v_3^2(v_3-v_3')=-1}$$

$${······}$$

$${2\lambda k_nv_n^2(v_n-v_n')=-1}$$

$${\sum_{i=1}^nk_i(v_i-v_i')^2s_i=E}$$

  考虑${v_i}$的范围。如果对应的${v_i'<0}$,吹的是逆风,那么${v_i>0}$;如果${v_i'>0}$,吹的是顺风,那么让${v_i=v_i'}$一定优于${v_i<v_i'}$,于是我们得到了${v_i}$的下界。${v_i}$的上界就是把所有的能量全部用在这一段路上所能达到的最大速度(然而程序里面上界不能这样写,数据有几个点存在${s_i=0}$的情况,smg嘛→_→)。

  知道了${v_i}$的下界,那么显然${k_iv_i^2(v_i-v_i')>0}$,所以${\lambda<0}$。所以${v_i}$随着${\lambda}$的增大而增大,而${\sum_{i=1}^nk_i(v_i-v_i')^2s_i}$随着${v_i}$的增大而增大。所以我们二分${\lambda}$,进而二分求解${v_i}$,把${v_i}$代入函数${g}$,与${E}$比较比较大小来判断${\lambda}$的范围是应该往上还是往下。

细节

  公式不要写错,精度把握好。

代码

// bzoj2876
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define inf 2147483640
#define eps 1e-13
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std;const int maxn=100010;
long double s[maxn],k[maxn],v[maxn],vp[maxn],maxv[maxn],Eu;
int n;long double check(long double lambda) {long double tmp=0;for (int i=1;i<=n;i++) {long double l=max((long double)0.0,vp[i]),r=maxv[i];v[i]=l;while (l<=r) {long double mid=(l+r)/2;if (2*lambda*mid*mid*k[i]*(mid-vp[i])>=-1) l=mid+eps,v[i]=mid;else r=mid-eps;}tmp+=k[i]*(v[i]-vp[i])*(v[i]-vp[i])*s[i];}return tmp<=Eu;
}
int main() {scanf("%d%LF",&n,&Eu);for (int i=1;i<=n;i++) {scanf("%Lf%Lf%Lf",&s[i],&k[i],&vp[i]);//maxv[i]=vp[i]+sqrt(Eu/k[i]/s[i]);maxv[i]=inf;}long double l=-inf,r=0,lambda;while (l<=r) {long double mid=(l+r)/2;if (check(mid)) l=mid+eps,lambda=mid;else r=mid-eps;}check(lambda);long double ans=0;for (int i=1;i<=n;i++) ans+=s[i]/v[i];printf("%.6Lf",ans);return 0;
}

转载于:https://www.cnblogs.com/MashiroSky/p/6368825.html

【bzoj2876】 Noi2012—骑行川藏相关推荐

  1. bzoj2876: [Noi2012]骑行川藏 :拉格朗日乘数法

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

  2. BZOJ2876 [Noi2012]骑行川藏

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  3. [BZOJ2876] [NOI2012]骑行川藏

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

  4. bzoj2876 [Noi2012]骑行川藏 [二分+拉格朗日乘数法]

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

  5. BZOJ2876: [Noi2012]骑行川藏

    显然最优情况下体力耗费恰好为E,我们记f(v1,v2-.vn)为在这n个速度下蛋蛋骑到n的耗时,phi(v1,v2-vn)为在这n个速度下蛋蛋骑到n耗费的体力,那么我们就是要在满足phi=E的情况下求 ...

  6. BZOJ2876 [Noi2012]骑行川藏 【拉格朗日乘数法】

    题目链接 BZOJ 题解 拉格朗日乘数法 拉格朗日乘数法用以求多元函数在约束下的极值 我们设多元函数\(f(x_1,x_2,x_3,\dots,x_n)\) 以及限制\(g(x_1,x_2,x_3,\ ...

  7. [NOI2012]骑行川藏

    [NOI2012]骑行川藏 思路一:二分导数 http://www.cnblogs.com/RabbitHu/p/9019762.html 考虑"性价比"即花费单位能量缩短的时间. ...

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

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

  9. 2876: [Noi2012]骑行川藏

    2876: [Noi2012]骑行川藏 Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special Judge Submit: 1243  Solved: ...

  10. bzoj 2876: [Noi2012]骑行川藏 拉格朗日乘子法

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

最新文章

  1. 函数-模块化程序设计
  2. 交换机多少钱一个?影响工业交换机价格的因素?
  3. [Python]网络爬虫(十):一个爬虫的诞生全过程(以山东大学绩点运算为例)
  4. 小米10T系列新机曝光:后置64MP三摄 辨识度超高
  5. 《TensorFlow技术解析与实战》——1.2 什么是深度学习
  6. 洛谷 P2032 扫描
  7. Java 集合系列-第七篇-List总结
  8. Spring的注解@Autowired和@Resource的区别
  9. 电商扣减库存_电商后台产品经理宝典
  10. 微信二维码扫码登录的原理
  11. 高频头极化角调整+用什么本振的高频头
  12. wps底板颜色怎么去掉_wps怎么把复制网页的灰色阴影去掉 底纹去掉方法
  13. 英国正在大举进军AI,看懂其三大投资走向
  14. 机器学习笔记——乳腺癌鸢尾花分类问题详解(没有直接调包)
  15. Android底层网络防火墙,Android系统中实现网络防火墙的方法
  16. 【已解决】平板作为外接显示屏-Duet
  17. Deformable Convolutional Networks论文翻译——中文版
  18. HDU 6578 Blank 区间dp
  19. PostgreSQL忘记密码
  20. html text decoration,更好利用text-decoration属性

热门文章

  1. Vue3 + TS PropType类型验证
  2. debian7搭建生产环境的linux+nodejs+express+mysql的web服务器
  3. 【设计模式】设计模式之行为型模式(二)(备忘录、观察者、状态、策略、模板方法、访问者)
  4. 海量游戏日志收集与分析
  5. 程序员讨厌项目经理的5个原因
  6. 【Unity Shader学习】边缘泛光效果2
  7. Excel表格中数字变成E+,如何快速恢复?
  8. NC数据库相关操作常用API
  9. java记录简单实现巨量Marketing-API自定义回传
  10. App Shortcuts实现长按图标显示快捷入口