被概率冲昏的头脑~~~

我们先将样例在图上画下来:

会发现,最大收益是:

看出什么了吗?

这不就是凸包吗?

跑一遍凸包就好了呀,这些点中,如果i号点是凸包上的点,那么它的ans就是自己(第二个点),不然的话,从上图来看,i的ans肯定和他相邻的两个是凸包边界的点有关(0节点和2节点),那么怎么求这个ans呢?(第x号点为横坐标为x的点)

实际上我也不知道就是个期望公式啊!

l[i]记录i号点往左走第一个为凸包边界的点(如果i为1号,那么l[i]为0,特殊的,如果i为2号,那么l[i]就是本身),r[i]同理。当l[x]==r[x]时,x时边界。

就是这个方程: (f[l[i]])*(r[i]-i)+f[r[i]]*(i-l[i])))/(r[i]-l[i]);

基础的期望方程,在此不再赘述(实际上是不会证)

关于凸包,在这贴一波yyb大神的博客:传送门戳我QwQ(顺便膜一波yyb大神%%%)

#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define RI register int
#define F 100000
using namespace std;
const int NS=1e5+5;
ll f[NS],l[NS],r[NS],hep[NS];
//f如题,l[i]/r[i]如上文,hep为凸包
template <typename _Tp> inline void IN(_Tp&x){
char ch;bool flag=0;x=0;
while(ch=getchar(),!isdigit(ch))if(ch=='-')flag=1;
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
if(flag)x=-x;
}
int main(){
int n,top=0;IN(n);hep[++top]=0;//注意先加入0!
for(int i=1;i<=n;++i)IN(f[i]);
for(int i=1;i<=n+1;++i){//凸包
while(top>=2){
int a=hep[top],b=hep[top-1];
if(((f[a]-f[b])*(i-a))<((f[i]-f[a])*(a-b)))--top;
else break;
}hep[++top]=i;
}
for(int i=1;i<top;++i){
//中间的节点的l,r值都为hep[i]/hep[i+1]
for(int j=hep[i]+1;j<hep[i+1];++j){
l[j]=hep[i],r[j]=hep[i+1];
}l[hep[i]]=hep[i],r[hep[i]]=hep[i];
}
for(int i=1;i<=n;++i){
ll ans=0;//记得LL!
if(l[i]==r[i])ans=f[i]*F;//为边界,直接跳下最优
else ans=(F*(f[l[i]]*(r[i]-i)+f[r[i]]*(i-l[i])))/(r[i]-l[i]);//否则用方程算
printf("%lld\n",ans);
}return 0;
}

题解 [USACO18DEC]Balance Beam的更多相关文章

  1. 题解-USACO18DEC Balance Beam详细证明

    (翻了翻其他的题解,觉得它们没讲清楚这个策略的正确性) Problem 洛谷5155 题意概要:给定一个长为\(n\)的序列,可以选择以\(\frac 12\)的概率进行左右移动,也可以结束并得到当前 ...

  2. 洛谷P5155 [USACO18DEC]Balance Beam(期望,凸包)

    你以为它是一个期望dp,其实它是一个凸包哒! 设平衡木长度为\(L\),把向右走平衡木那个式子写一下: \[dp[i]=\frac{dp[i+1]+dp[i-1]}{2}\] 然后会发现这是一个等差数 ...

  3. Luogu5155 [USACO18DEC]Balance Beam

    题目链接:洛谷 这道题看起来是个期望题,但是其实是一道计算几何(这种题太妙了) 首先有一个很好的结论,在一个长度为$L$的数轴上,每次从$x$处出发,不停地走,有$\frac{x}{L}$的概率从右端 ...

  4. [USACO18DEC]Balance Beam

    题目链接:这里 或者这里 答案是很显然的,记\(g(i)\)为在\(i\)下平衡木时的期望收益 那么\(g(i)=max(f(i),\frac{g(i-1)+g(i+1)}{2})\) 好了做完了 T ...

  5. Luogu5155 USACO18DEC Balance Beam(概率期望+凸包)

    假设已经求出了在每个点的最优期望收益,显然最优策略是仅当移动一次后的期望收益>当前点收益时移动.对于初始点,其两边各存在一个最近的不满足上述条件的位置,因此从初始点开始随机游走,直到移动到这两个 ...

  6. p5155 [USACO18DEC]Balance Beam

    传送门 分析 https://www.luogu.org/blog/22112/solution-p5155 代码 #include<bits/stdc++.h> using namesp ...

  7. [USACO18DEC]Balance Beam P

    根据题意不难发现这个模型是不好进行贪心的,于是可以考虑使用 \(dp\).可以令 \(dp_i\) 表示在 \(i\) 位置以最优策略能获得的报酬期望值,那么会有转移: \[dp_i = \max(f ...

  8. 题解-USACO18DEC Sort It Out

    Problem 洛谷5156 题意概要:给定一个长为\(n\)的排列,可以选择一个集合\(S\)使这个集合内部元素排到自己在整个序列中应该在的位置(即对于集合\(S\)内的每一个元素\(i\),使其排 ...

  9. bzoj5483: [Usaco2018 Dec]Balance Beam

    又又又又又又又被踩爆了 首先容易写出这样的期望方程:f(1)=max(d(1),f(2)/2),f(n)=max(d(n),f(n-1)/2), f(i)=max(d(i),(f(i-1)+f(i+1 ...

随机推荐

  1. Application Warm-up Module IIS7.5 也有Warm Up功能,让ASP.NET 第一次Request不变慢

    Application Warm-up Module: 應用程式的暖機代理人 http://www.microsoft.com/taiwan/technet/iis/expand/Applicatio ...

  2. USACO Section 1.2PROB Transformations

    挺有趣的一道题,呵呵,不算难 /* ID: jusonal1 PROG: transform LANG: C++ */ #include <iostream> #include <f ...

  3. 三种解密 HTTPS 流量的方法介绍

    转载自:https://imququ.com/post/how-to-decrypt-https.html作者: Jerry Qu Web 安全是一项系统工程,任何细微疏忽都可能导致整个安全壁垒土崩瓦 ...

  4. Rails5入门

    更新: 2017/05/29 更新: 2017/09/07 补充对ruby自身的扩张的放置位置  配置文件位置  /config/routes.rb  最简单的定义方法  get ('hello/in ...

  5. lodop 打印

    使用Lodop打印: 一.在官网下载http://www.lodop.net/download.html 若是安装还是提示未安装,就按转这个 二.准备两个js 三.需要在页面最上面加入 <htm ...

  6. Android 性能优化(27)*zipalign让apk数据对齐,运行更快。

    1.zipalign 简介 zipalign is an archive alignment tool that provides important optimization to Android ...

  7. 转 form表单中name和id区别

          HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字.图形.动画.声音.表格.链接等.HTML的结构包括头部(Head).主体(Body)两大部分,其中头部描述浏览器所需 ...

  8. Cesium加载影像

    注意:使用自定义数据源时,Cesium.Viewer类参数必须设置为 baseLayerPicker:false A. 使用天地图数据源 //天地图var provider=new Cesium.We ...

  9. A8ERP配送管理系统

  10. Python 语言搭建SELENIUM测试环境,搭建过程记录。

    第一步,安装Python: 第二步,安装SetupTools: 第三步,安装Pip: 第四步,安装selenium(for python) 第五步,新建第一个基于Firefox的测试用例 上述 只是步 ...