思路讲解
精髓在于猜这个你随机跳到其他位置以后,再跳到终点N+1的期望成本,可以设这个东西位S,用这个S算出来的S,我们叫做g(S)。那么 g(S)=S 那是必须的,但是我们猜的不等于怎么办呢?
于是我们就二分。
至于这个二分的收敛方向嘛,我试着推了一下,我的建议是都试试。guess嘛。

这个图把y=x画的太斜了,实际上在y=x的下面,g(S)<S,需要向左移动(也就是even<mid,r=mid)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| vdb dp(N+5); DB l=0,r=accumulate(all(A),0ll)+accumulate(all(B),0ll); FOR(_,1,100){ DB mid=(l+r)/2; dp[N]=min((DB)A[N-1],mid+B[N-1]); ROF(i,N-1,1){ dp[i]=min(dp[i+1]+A[i-1],mid+B[i-1]); } DB even=0; FOR(i,1,N){ even+=dp[i]; } even/=(N+1); if(even>mid){ l=mid; }else{ r=mid; } }
|
AC代码
心路历程(WA,TLE,MLE……)