[NOI2012]骑行川藏——拉格朗日乘子法
前置芝士:拉格朗日乘子法
要求\(n\)元目标函数\(f(x_1,x_2,...,x_n)\)的极值,且有\(m\)个约束函数形如\(h_i(x_1,x_2,...,x_n)=0\)
引入松弛变量\(\alpha _1-\alpha _m\),构造拉格朗日函数如下:
\]
然后分别对\(x\)和\(a\)求偏导并令偏导值为\(0\)($\nabla $为梯度向量):
\]
求解上述方程组,即可求得极值点。但是解方程组的代价太大了,在做题时我们一般会通过函数的单调性二分来解
为什么可以这样呢,考虑一下,满足条件的极值点应该是在目标函数的等高线与约束函数曲线相切的点,在这一点上有如下等式成立:
\]
而拉格朗日函数求导之后和上式本质相同,因此它能求得最值
还有广义拉格朗日乘子法是适用于有不等式约束的情况
题解
首先我们把目标函数和约束函数都找出来
目标函数$f(x)=\sum\limits_{i=1}^{n}\frac{s_i}{v_i}$
约束函数$g(x)=\sum\limits_{i=1}^{n}k_is_i(v_i-v'_i)^2-E_U$
那么拉格朗日函数为
$$L(x,\alpha)=f(x)+\alpha g(x)=-\alpha E_U+\sum\limits_{i=1}^{n}\frac{s_i}{v_i}+\alpha k_is_i(v_i-v'_i)^2$$
求出$v_i$关于$L$的偏导并将其设置为$0$
$$\frac{\partial L(v,\alpha)}{\partial v_i}=-\frac{s_i}{v_i^2}+2\alpha s_ik_i(v_i-v'_i)=0$$
$$\Rightarrow \alpha=\frac{1}{2k_iv_i^2(v_i-v'_i)}$$
经过简单讨论,可以得出$\alpha$随$v$单调递减,$g$随$v$单调递增,所以$g$随$\alpha$单调递减
于是我们可以先二分$\alpha$,然后再二分解出$v$,复杂度$O(nlog^2n)$
附代码:
```cpp
#include
using namespace std;
define N 10000
const double eps = 1e-13, INF = 1e5;
int n;
double Eu, s[N + 5], k[N + 5], v0[N + 5], v[N + 5];
bool check(double lamda) {
for (int i = 1; i <= n; ++i) {
double tar = 1 / (2 * k[i] * lamda), l = max(v0[i], 0.0), r = INF, mid;
while(r - l >= eps) {
mid = (l + r) / 2;
if (mid * mid * (mid - v0[i]) > tar) r = mid;
else l = mid;
}
v[i] = mid;
}
double E = 0;
for (int i = 1; i <= n; ++i)
E += k[i] * s[i] * pow(v[i] - v0[i], 2);
return E <= Eu;
}
int main() {
cin >> n >> Eu;
for (int i = 1; i <= n; ++i)
cin >> s[i] >> k[i] >> v0[i];
double l = 0, r = INF, mid;
while (r - l >= eps) {
mid = (l + r) / 2;
if (check(mid)) r = mid;
else l = mid;
}
double ans = 0;
for (int i = 1; i <= n; ++i)
ans += s[i] / v[i];
cout << setiosflags(ios::fixed) << setprecision(10);
cout << ans << endl;
return 0;
}
[NOI2012]骑行川藏——拉格朗日乘子法的更多相关文章
- [BZOJ2876][NOI2012]骑行川藏(拉格朗日乘数法)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2876 分析:就是要求约束条件下函数的极值,于是拉格朗日乘数列方程,发现化简后的关于vi ...
- bzoj 2876: [Noi2012]骑行川藏 拉格朗日数乘
2876: [Noi2012]骑行川藏 Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1033 Solved: ...
- bzoj2876 [Noi2012]骑行川藏
Description 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨.川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的体力十分有限,因 ...
- [NOI2012] 骑行川藏 | 求导 二分
一个能看的题解!预备知识只有高中数学的[导数].不用什么偏导数/拉格朗日乘子法之类的我看不懂的东西( •̀∀•́ )! 如果你不知道什么是导数,可以找本高中数学选修2-2来看一下!看第一章第1.2节就 ...
- 【bzoj2876】 Noi2012—骑行川藏
http://www.lydsy.com/JudgeOnline/problem.php?id=2876 (题目链接) 题意 在满足约束条件$${\sum_{i=1}^ns_ik_i(v_i-v_i' ...
- Luogu P2179 [NOI2012]骑行川藏
题意 给定 \(n\) 个路段,每个路段用三个实数 \(s_i,k_i,v^\prime_i\) 描述,最小化 \[F(v_1,\cdots v_n)=\sum\limits_{i=1}^{n}\fr ...
- bzoj2876 [NOI2012]骑行川藏(拉格朗日乘数法)
题目描述 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨.川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的体力十分有限,因此在每天的骑行 ...
- 2876: [Noi2012]骑行川藏 - BZOJ
Description 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨.川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的体力十分有限,因 ...
- BZOJ2876 [Noi2012]骑行川藏 【拉格朗日乘数法】
题目链接 BZOJ 题解 拉格朗日乘数法 拉格朗日乘数法用以求多元函数在约束下的极值 我们设多元函数\(f(x_1,x_2,x_3,\dots,x_n)\) 以及限制\(g(x_1,x_2,x_3,\ ...
随机推荐
- Oracle导出包含clob字段的sql脚本工具
之前工作中遇到生产环境不允许导入Oracle的dmp文件,只能导入sql脚本,但是表中存在clob字段,直接用plsql工具无法导出clob字段,用了下dbvisualizer可以直接导出,亲测可用. ...
- PTA(Basic Level)1020.月饼
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部分库存.样 ...
- 处理vue页面406问题纪要
1.servlet-mapping url-pattern / 与 /* 的区别注意关注 2.mvc:resource 是否生效,注意关注,如不生效,可在 web.xml中配置<servlet- ...
- ORACLE查询进程,并杀死
用于存放常用SQL --查询主键在哪一列 --设置页大小 --设置行大小 col COLUMN_NAME for a20 --设置字段显示长度 col TABLE_NAME for a20 col O ...
- Spring 加载项目外部配置文件
背景 在项目的部署过程中,一般是打成 war 或者 jar 包,这样一般存在两种问题: 即使是配置文件修改,也还需要整个项目重新打包和部署. 整个项目只有一套环境,不能切换. 针对上面的问题,可以使用 ...
- MySQL反应慢排查思路
数据库异常假死排查需要数据(当时问题的时间,前后时间在2个小时的数据就行) 1.MySQL相关配置 整体可以借助于pt-mysql-summary生成(percona-tools工具) 2.操作系统方 ...
- 【转】iis7下站点日志默认位置
本文转自:http://www.cnblogs.com/mincyw/p/3425468.html 在iis6时,通过iis管理器的日志配置可以找到站点日志存储的位置. 但是在iis7下,iis管理器 ...
- mysql批量修改数据库表引擎
数据库表之前的引擎是MyISAM,影响事务操作,要改成Innodb引擎 查询表引擎 SELECT CONCAT(table_name,' ', engine) FROM information_sch ...
- django API返回中文乱码
renturn HttpResponse(json.dumps(data,ensure_ascii=False))
- Java基础之IO和NIO补完
Java Stream,File,IO 关于NIO和IO的比较,参考:Java NIO系列教程(十二) Java NIO与IO java包之java.io 参考材料:菜鸟教材 NIO 由于下面的系列教 ...