BZOJ2876 [Noi2012]骑行川藏 【拉格朗日乘数法】
题目链接
BZOJ
题解
拉格朗日乘数法
拉格朗日乘数法用以求多元函数在约束下的极值
我们设多元函数\(f(x_1,x_2,x_3,\dots,x_n)\)
以及限制\(g(x_1,x_2,x_3,\dots,x_n) = E\)
我们需要求\(f\)在限制\(g\)下的极值
如图
当\(f\)取到最值时,必然与\(g\)的等高线相切
所以我们只需找出这个切点
切点处两函数的梯度向量平行\({\nabla f~//~\nabla g}\)
梯度向量的每一维就是该维下的偏导函数
\[{\nabla f=(\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},\frac{\partial f}{\partial x_3},\dots,\frac{\partial f}{\partial x_n})}\]
偏导可以理解为把别的变量看做常数,只对一个变量求导
所以只需令
\[\nabla f = \lambda \nabla g\]
可以得到\(n\)个方程,加上\(g\)本身就是一个方程
可以得到\(n + 1\)个方程,可解\(\lambda\)以及\(x_i\)
本题
限制是
\[\sum\limits_{i = 1}^{n}s_ik_i(v_i - v'_i)^{2} = E\]
我们要最小化
\[\sum\limits_{i = 1}^{n}\frac{s_i}{v_i}\]
利用拉格朗日乘数法,我们求出\(n + 1\)个方程
对于变量\(x_i\)的偏导,可得到方程
\[2\lambda k_iv_i^{2}(v_i - v'_i) = -1\]
首先\(v_i \ge v'_i\),所以除\(\lambda\)外左边是正的,所以\(\lambda\)是负的,然后可以发现\(v_i\)关于\(\lambda\)单调
而方程
\[\sum\limits_{i = 1}^{n}s_ik_i(v_i - v'_i)^{2} = E\]
左边也关于\(v_i\)单调,所以可以使用二分求解
当然求\(v_i\)也可以用牛顿迭代
还有就是精度要开够大。。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
using namespace std;
const int maxn = 10005,maxm = 100005;
const double eps = 1e-13,INF = 1e12;
int n;
double E,v1[maxn],v[maxn],s[maxn],k[maxn];
inline double f(int i,double lam){return 2 * lam * k[i] * v[i] * v[i] * (v[i] - v1[i]) + 1;
}
inline double cal(double lam){REP(i,n){double l = max(v1[i],0.0),r = INF;while (r - l > eps){v[i] = (l + r) / 2.0;if (f(i,lam) >= 0) l = v[i];else r = v[i];}v[i] = l;}double re = 0;REP(i,n) re += s[i] * k[i] * (v[i] - v1[i]) * (v[i] - v1[i]);return re;
}
int main(){scanf("%d%lf",&n,&E);REP(i,n) scanf("%lf%lf%lf",&s[i],&k[i],&v1[i]);double l = -INF,r = 0,mid;while (r - l > eps){mid = (l + r) / 2.0;if (cal(mid) >= E) r = mid;else l = mid;}cal(l);double ans = 0;REP(i,n) ans += s[i] / v[i];printf("%.10lf\n",ans);return 0;
}
转载于:https://www.cnblogs.com/Mychael/p/9250271.html
BZOJ2876 [Noi2012]骑行川藏 【拉格朗日乘数法】相关推荐
- bzoj 2876: [Noi2012]骑行川藏 拉格朗日数乘
2876: [Noi2012]骑行川藏 Time Limit: 20 Sec Memory Limit: 128 MBSec Special Judge Submit: 1033 Solved: ...
- bzoj2876: [Noi2012]骑行川藏 :拉格朗日乘数法
题目链接 bzoj2876 题目描述 Description 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨.川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻, ...
- [BZOJ2876] [NOI2012]骑行川藏
Description 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨.川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的体力十分有限,因 ...
- BZOJ2876: [Noi2012]骑行川藏
显然最优情况下体力耗费恰好为E,我们记f(v1,v2-.vn)为在这n个速度下蛋蛋骑到n的耗时,phi(v1,v2-vn)为在这n个速度下蛋蛋骑到n耗费的体力,那么我们就是要在满足phi=E的情况下求 ...
- bzoj2876 [Noi2012]骑行川藏 [二分+拉格朗日乘数法]
Description 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨.川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的体力十分有限,因 ...
- BZOJ2876 [Noi2012]骑行川藏
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- bzoj 2876: [Noi2012]骑行川藏 拉格朗日乘子法
题意 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨.川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的体力十分有限,因此在每天的骑行前设 ...
- [NOI2012]骑行川藏
[NOI2012]骑行川藏 思路一:二分导数 http://www.cnblogs.com/RabbitHu/p/9019762.html 考虑"性价比"即花费单位能量缩短的时间. ...
- 2876: [Noi2012]骑行川藏
2876: [Noi2012]骑行川藏 Time Limit: 20 Sec Memory Limit: 128 MBSec Special Judge Submit: 1243 Solved: ...
最新文章
- python可视化脉搏和血氧数据并通过阈值动态调整、动态可视化异常值
- CentOS下Redis安装配置小结
- 检查卷位图时发现损坏怎么修复_中频弯管严密性如何测试?怎么修复中频弯管?...
- C++ Primer 5th笔记(chap 15 OOP)继承之派生类
- ubuntu安装VMware Tools
- android布局技巧:创建高效布局
- vb6 由于超出容量限制 不能创建新事务_分布式限流?你也能轻松玩转(没啥新技术)...
- 判断整除(opj)(动态规划)
- InputStream和Reader,FileInputStream和 FileReader的区别
- 三字经带拼音a4打印版_人教版八年级下册英语6单元重点单词带音标打印版
- 运动目标跟踪(十三)--SRDCF/DeepSRDCF
- CentOS下apache绑定域名
- 最实诚导师招生简章“火”了:目前只有不太充足的经费,但绝不克扣研究生补贴!...
- linux之 sed命令
- 分形艺术能让你感受上帝的力量——新锐100设计师风达专访
- 转载 信号量 第六篇
- 金融中需要的计算机知识,金融笔试中的综合知识一般会考什么?
- Vim编辑器的基本使用(二)末行模式中的命令
- 苹果操作系统 leopard 10.5 (PC破解完全中文安装版,IBM X40安装成功)
- fiddler手机抓包配置代理后没有网络(手机不能上网)
热门文章
- 为什么计算机的编码那么多,为什么中国剩余定理可用于计算机编码?
- 此域的推荐安全级别是“安全级-高”的解决办法
- 不要做一个浮躁的程序员
- ZOJ-3494 BCD Code (ac自动机+数位dp)
- POJ 3258 -- River Hopscotch(二分)
- VS Code修改菜单栏字体大小
- (分组交换时延)谢希仁 第七版第一章1-10题详细解答
- python 继承的规则
- 2021杭州高考杭二成绩查询,2021年杭州重点高中名单及排名,杭州高中高考成绩排名榜...
- Linux基础-1.0共享文件夹创建