【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. charles录制https请求

    之前一直用windows系统,抓包什么的都是用的fiddler或者wireshark,操作比较简单,扩展性也比较强,现在因为工作原因换了mac,在网上一直没有找到fiddler的mac版本,就只能切换 ...

  2. 前端--初识jQuery

    jQuery 一.jQuery介绍 1.jQuery是一个轻量级.兼容多浏览器的js库. 2.jQuery使用户能够更方便地处理HTML Document,Events,实现动画效果,方便的进行Aja ...

  3. JavaScript的数组和字符串应用

    函数search实现在一个已排序的数字类型数组中查找指定数字的功能. 可以采用数组的内置方法,二分查找法等进行操作 //方法一 var search = function(arr,dst){ var ...

  4. 关于js回调方法 js递归时使用方法

    js中递归调用本身可以这样: function a1(n){ a1(n)}但是如果需要在参数n进行自增的情况下判断会出错: function a1(n){ if(n>10) return 'aa ...

  5. eclipse Unable to read repository 花了三天时间,吐血解决

    安装eclipse 的 swt examples插件时出现这个错误 查了三天,发现就是网速太慢,导致下载一半下不动出错,原因大概是因为国外吧 于是想看看能不能通过离线安装插件包的方式 问题来了,插件包 ...

  6. 从无到有之webpack+vuerouter的简单例子以及各个属性解释

    之前一直没玩过webpack和vue,近两周才看这玩意,本文纯属自己的实验+之前angular作战经验的理解一些入门文章 首先webpack关于vue以及各个包 module.exports = { ...

  7. Scrum立会报告+燃尽图(Beta阶段第二次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2384 项目地址:https://coding.net/u/wuyy694 ...

  8. tomcat开发环境配置

    1.环境配置教程 环境变量.安装版.配置版 2.编写启动tomcat的批处理文件 3.改变端口 4.虚拟目录

  9. 第三次c++作业

    https://github.com/egoistor/3Elevators-scheduling 老实说,因为这周时间紧张,(高数的期中考和一些奇奇怪怪的时期), 所以代码大体是有,但是很多细节处理 ...

  10. 读《it小小鸟》有感

    我一直认为大学就是一个自由的舒适的学习环境,没有人可以干扰你限制你,以至于我到了大学之后只剩下了颓废的生活.每天上课玩手机,下课玩电脑,吃饭叫外卖,从不去锻炼,周末就熬夜通宵,状态越来越差,导致我逐渐 ...