【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. ubuntu的学习教程(常用操作)

    摘要 最近在学习linux,把自己学习过程中遇到的常用操作以及一些有助于理解的内容记录下来.我主要用的是ubuntu系统 命令提示符 '~' 这个是指用户的家目录,用户分为root用户和普通用户,ro ...

  2. 深入理解C++中的Const,Mutable以及Volatile

    我一直认为const表示一个常量,常量就是一个无法被修改的值,但是没有深入理解const的实现,甚至不知道mutable和volatile的存在,最近在书中看到了这一部分的知识,所以本文将详细解析这几 ...

  3. tomcat7以上的版本,400BadRequest

    出现此原因的解决办法其一,详情可见: https://www.cnblogs.com/dygrkf/p/9088370.html. 另一种解决方法,就是把url中不允许出现的字符编码,后台接收时再解码 ...

  4. 车牌,车架号,VIN码毫秒识别技术,汽车后市场的春天到来了

    vin码(车架号)识别运用 不仅在制造.销售.保养.保险.车辆评估.交易环节会需要录入汽车的VIN码,在交通事故处理中,作为汽车身份唯一识别码,VIN码是处理事故的执法人员必须要记录的信息之一.随着汽 ...

  5. Python接口测试实战1(下)- 接口测试工具的使用

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  6. Windows下遍历某目录下的文件

    需求:要求遍历某个目录下的所有文件,文件夹 之前遇到过一些参考程序,其中有一种方法只能遍历 FAT32 格式的目录, 无法遍历NTFS的目录.

  7. 基于marathon-lb的服务自发现与负载均衡

    参考文档: Marathon-lb介绍:https://docs.mesosphere.com/1.9/networking/marathon-lb/ 参考:http://www.cnblogs.co ...

  8. Jenkins 自动化测试

    学习 Jenkins 自动化测试的系列文章 Robot Framework 概念 Robot Framework 安装 Pycharm + Robot Framework 环境搭建 Robot Fra ...

  9. ASP.NET 文档

    标题:ASP.NET 文档 地址:https://docs.microsoft.com/zh-cn/aspnet/index#pivot=core&panel=core_overview 标题 ...

  10. Struts2:Struts2在jsp中使用标签时值的获取

    在OGNL的使用中,需要访问一系列的对象,这些对象放在OGNL的context中,context是一个Map结构,实际上它和ActionContext是相应的. 当用户发送请求时,struts会创建A ...