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

题面

BZOJ

题解

我们有一个很有趣的思路。

首先我们给每条边随意的赋一个初值。

当然了,这个初值不会比这条边的风速小。

那么,我们可以先计算一下当前所需要的总能量。

剩下的能量我们分成若干等份。

每次从所有的边中,选择一个加了这一份能量后,时间减少最多的那条边,让他提速。

直到我们所有的能量都分配完,此时答案一定最优。

所以,可以简化一下题意。

在\(\sum ks(v'-v)^2=E_U\)的情况下,最小化\(\sum \frac{s}{v}\)

然后剩下的部分我就去看看学长写的吧(因为我也不懂)

MashiroSky's Blog

主要是不知道为什么梯度向量就平行了

补充一下自己的几点理解:

首先能量和等于\(E_U\)是一个函数,我们可以把它先在空间中表示出来。

然后最小化的值我们也可以看成一个函数,那么我们类似于地理中的等高线,

把所有等值的点的位置一圈一圈的全部向外拓展,当它第一次与能量构成的函数相交时,

并且这个交点一定是切点,此时取到的就是最小值了。

梯度向量由偏向量构成,其中偏向量的每一维分别对应这这个函数在每一维上的导数。

也就是把每一维分别看做主元,其他的都看作常量后求导。

也许梯度向量相等可以看做为在切点处,任何一维的增长量都相等?

假设我们默认梯度向量平行

那么,就有\((v_1,v_2,v_3....,v_n)=\lambda (v'_1,v'_2,...,v'_n)\)

我们可以二分这个\(\lambda\),然后求解出所有的速度。

求解速度的时候等价于解方程\(2\lambda Kv^2(v-v')=-1\)

所有已知量都挪到右边,假设算完后的结果是\(c\)

那么就是\(v^3-v'v^2=c\)

我们找左边的零点,发现显然只有两个零点\(v'\)和\(0\)

并且我们最终的速度一定不会小于\(v'\),解方程的时候我们可以二分,

解的下界是\(max(0,v')\)

差不多就这些了。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAX 11111
#define eps 1e-13
int n;
double Eu,S[MAX],K[MAX],V[MAX],v[MAX],ans;
bool check(double lam)
{
double ret=0;
for(int i=1;i<=n;++i)
{
double l=max(0.0,V[i]),r=1e9,c=-1/(2*lam*K[i]);v[i]=l;
while(l+eps<=r)
{
double mid=(l+r)/2;
if(mid*mid*(mid-V[i])<c)l=mid;
else r=mid;
}
v[i]=l;ret+=K[i]*S[i]*(V[i]-v[i])*(V[i]-v[i]);
}
return ret<=Eu;
}
int main()
{
scanf("%d%lf",&n,&Eu);
for(int i=1;i<=n;++i)scanf("%lf%lf%lf",&S[i],&K[i],&V[i]);
double l=-1e9,r=0,ret;
while(l+eps<=r)
{
double mid=(l+r)/2;
if(check(mid))l=mid,ret=mid;
else r=mid;
}
check(ret);
for(int i=1;i<=n;++i)ans+=S[i]/v[i];
printf("%.10lf\n",ans);
return 0;
}

【BZOJ2876】【NOI2012】骑行川藏(数学,二分答案)的更多相关文章

  1. bzoj2876 [Noi2012]骑行川藏

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

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

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

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

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2876 分析:就是要求约束条件下函数的极值,于是拉格朗日乘数列方程,发现化简后的关于vi ...

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

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

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

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

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

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

  7. [NOI2012] 骑行川藏 | 求导 二分

    一个能看的题解!预备知识只有高中数学的[导数].不用什么偏导数/拉格朗日乘子法之类的我看不懂的东西( •̀∀•́ )! 如果你不知道什么是导数,可以找本高中数学选修2-2来看一下!看第一章第1.2节就 ...

  8. 【bzoj2876】 Noi2012—骑行川藏

    http://www.lydsy.com/JudgeOnline/problem.php?id=2876 (题目链接) 题意 在满足约束条件$${\sum_{i=1}^ns_ik_i(v_i-v_i' ...

  9. bzoj 2876: [Noi2012]骑行川藏【拉格朗日乘数法+二分】

    详见: http://blog.csdn.net/popoqqq/article/details/42366599 http://blog.csdn.net/whzzt/article/details ...

  10. 【BZOJ】2876: [Noi2012]骑行川藏

    题意 给出\(s_i, k_i, v_i', E\),满足\(\sum_{i=1}^{n} k_i s_i ( v_i - v_i' )^2 \le E, v_i > v_i'\),最小化$ \ ...

随机推荐

  1. 【RAC搭建报错】在RAC搭建到grid安装前的检查时,报错

    这种ip的报错,无非是检查防火墙,ip配置的原因 而我防火墙已关闭,ip也没配错 最后的原因是因为我172.16.1.41/42这两个IP选的虚拟机没有配置网段 [grid@rac01 grid]$ ...

  2. 阿里云Ubuntu 14.04 + Nginx + .net core + MySql

    前段时间帮朋友写了一个网站,现在做一个记录. .Net Core 安装: curl https://packages.microsoft.com/keys/microsoft.asc | gpg -- ...

  3. python全栈开发- 前⽅⾼能-迭代器

    python_day_12 今日主要内容 1, 函数名的应用,第一类对象 函数名可以像变量一样进行使用 1.赋值 2.作为list元素 3.作为参数 4.作为返回值 2, 闭包 内部函数访问外部函数的 ...

  4. Elasticsearch.Net 异常:[match] query doesn't support multiple fields, found [field] and [query]

    用Elasticsearch.Net检索数据,报异常: )); ElasticLowLevelClient client = new ElasticLowLevelClient(settings); ...

  5. sqli-labs学习笔记 DAY2

    DAY2 sqli-labs lesson 2 手工注入 URL:http://localhost/sqli-labs-master/Less-2/ Parameter:id 注入点检测:id=2;– ...

  6. 动态语言的灵活性是把双刃剑 -- 以 Python 语言为例

    本文有些零碎,总题来说,包括两个问题:(1)可变对象(最常见的是list dict)被意外修改的问题,(2)对参数(parameter)的检查问题.这两个问题,本质都是因为动态语言(动态类型语言)的特 ...

  7. [笔记] centos6.6编译安装httpd2.4.10

    系统安装包是CentOS-6.6-x86_64-minimal.iso 查看一下uname信息 [root@localhost ~]# uname -a Linux localhost.localdo ...

  8. 团队计划会议(二)——WBS

    一.会议及WBS 因为是第一次开发android应用,所以我们对这次开发心里也没底,最后我们商量暂时先实现主要的几个骨架功能,之后再慢慢完善. 会议期间,我们根据自己的能力大致先估算了完成这些功能需要 ...

  9. CDOJ ABCDE dp(前缀和优化)

    题目链接: http://acm.uestc.edu.cn/#/problem/show/1307 ABCDE Time Limit: 1000/1000MS (Java/Others)Memory ...

  10. Notepad++如何多视图(分屏)显示

    Notepad++ v6.6.7 当需要同时查阅或者编辑多个文件时,正是多视图功能大显身手的时候. 可以在你想要在另一边预览操作的文件名字(在工具栏和文件内容之间)上,单击右键,如下图所示,选择移动到 ...