NOI2012 騎行川藏

2022-02-05 09:22:03 字數 1636 閱讀 3267

[noi2012]騎行川藏

思路一:二分導數

考慮「價效比」即花費單位能量縮短的時間。

如果我們給每一段隨機分配乙個速度,再調整

那麼一定選擇價效比最高的調整,或者把價效比較低的能量取回,再分配

而價效比隨著能量分配,會越來越低

可以發現的是,最後所有的n段的價效比一定都相同!

(如果存在不同的,那麼一定可以從價效比較低的收回一些能量,給價效比高的用,使得總時間更少)

由於實數範圍,所以暴力模擬用個堆什麼的不現實

考慮用數學方法:

每段的t-e影象是乙個類反比函式

每個點的斜率就是當前能量的價效比!

就是$e_i$位置的導數

也即,最後的所有影象$e_i$的導數都是一樣的!(並且都是負數)

而且可以發現,最後導數負數絕對值越小(導數越大),那麼花費的總能量越多,時間越短

所以有二分的性質!

二分導數,考慮怎麼檢驗

直觀的想法是求出t-e的導數關於e的函式,,,沒法求

但是,t和v的影象的導數就是y=si/x的導數可以求,e和v的導數根據關係式可以直接求

所以考慮通過v作為中介,求出t-e的導數關於v的函式

(看上面部落格)然後就得到了式子,對於二分的導數,解方程求出$v_i$,再求出$e_i$,通過e的總和判斷二分走向

至於解方程,就用二分即可。(由於等式一邊是正數,所以一定有$v_i>v_i'$)

一些精度問題:(本題精度要求還是比較高的)

1.二分解方程判斷的時候,能不用除法就不要用除法!但是不等式記得變號!(因為x小於零)

2.eps 1e-14(也可以不用eps,二分100次左右就結束(看人品。。。))

**:

#include#define il inline

#define reg register int

#define numb (ch^'0')

using

namespace

std;

typedef

long

long

ll;il

void rd(int &x)

namespace

miracle

ret=(l+r)/2

;

return

ret;

}double che(double

mid)

return

sum;

}int

main()

double r=0.0,l=-100000000.00

;

int cnt=100

;

while(r-l>eps)

double mid=(l+r)/2.0

;

for(reg i=1;i<=n;++i)

printf(

"%.10lf

",ans);

return0;

}}signed main()

/*author: *miracle*

date: 2019/2/5 11:36:13

*/

思路二:拉格朗日乘數法

咕咕咕

NOI 2012 騎行川藏

題意 在滿足 i vi 0且 n i 1k isi vi t i 2 e 前提下最小化 n i 1s i vi 學習了一下拉格朗日橙子乘子法。對於函式f x1,x 2,xn 和g x1,x 2,xn 在滿足g c c為 常數 的前提下求 f 的最小值。我們直觀地想象,所有極值點一定滿足 f g 令f...

NOI2012 騎行川藏 求導 二分

乙個能看的題解!預備知識只有高中數學的 導數 不用什麼偏導數 拉格朗日乘子法之類的我看不懂的東西 如果你不知道什麼是導數,可以找本高中數學選修2 2來看一下!看第一章第1 2節就好啦。傳送門 選修2 2 感性理解一下這道題 一開始,我們可以給所有路段隨便分配乙個速度。接下來,我們需要在一些路段上耗費...

2876 Noi2012 騎行川藏

time limit 20 sec memory limit 128 mbsec special judge submit 1243 solved 646 submit status discuss 蛋蛋非常熱衷於挑戰自我,今年暑假他準備沿川藏線騎著自行車從成都前往拉薩。川藏線的沿途有著非常美麗的風...