一直在考虑, 每一段的贡献, 没想到这个东西能直接dp。。因为所有的h都是一样的。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PLL pair<LL, LL>
#define PLI pair<LL, int>
#define PII pair<int, int>
#define SZ(x) ((int)x.size())
#define ull unsigned long long using namespace std; const int N = + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + ;
const double eps = 1e-;
const double PI = acos(-); int n, h, x[N], lft[N], rgt[N];
double ans, p, pr, pl;
double f[N][N][][];
bool vis[N][N][][]; double dp(int i, int j, int u, int v) {
if(i > j) return ;
if(vis[i][j][u][v]) return f[i][j][u][v];
double& ans = f[i][j][u][v];
double tmp1 = , tmp2 = ;
if(!u) ans += 0.5 * pl * (dp(i + , j, , v) + min(h, x[i] - x[i - ])), tmp1 = min(h, x[i] - x[i - ]);
else ans += 0.5 * pl * (dp(i + , j, , v) + min(h, x[i] - x[i - ] - h)), tmp1 = min(h, x[i] - x[i - ] - h);
if(v) ans += 0.5 * pr * (dp(i, j - , u, ) + min(h, x[j + ] - x[j])), tmp2 = min(h, x[j + ] - x[j]);
else ans += 0.5 * pr * (dp(i, j - , u, ) + min(h, x[j + ] - h - x[j])), tmp2 = min(h, x[j + ] - h - x[j]);
int L = min(rgt[i], j), R = max(lft[j], i);
ans += 0.5 * pr * (dp(L + , j, , v) + x[L] - x[i] + (L != j ? h : tmp2));
ans += 0.5 * pl * (dp(i, R - , u, ) + x[j] - x[R] + (R != i ? h : tmp1));
vis[i][j][u][v] = true;
return ans;
} int main() {
scanf("%d%d%lf", &n, &h, &p);
pl = p, pr = - p;
for(int i = ; i <= n; i++) scanf("%d", &x[i]);
x[] = -inf, x[n + ] = inf;
sort(x + , x + + n);
lft[] = , rgt[n] = n;
for(int i = ; i <= n; i++)
lft[i] = x[i] - h < x[i - ] ? lft[i - ] : i;
for(int i = n - ; i >= ; i--)
rgt[i] = x[i] + h > x[i + ] ? rgt[i + ] : i;
printf("%.10f\n", dp(, n, , ));
return ;
} /*
*/

Codeforces 596D Wilbur and Trees dp (看题解)的更多相关文章

  1. Codeforces 596D Wilbur and Trees

    http://codeforces.com/contest/596/problem/D 题目大意: 有n棵树排成一排,高度都为h. 主人公要去砍树,每次等概率地随机选择没倒的树中最左边的树或者最右边的 ...

  2. Codeforces 442D Adam and Tree dp (看题解)

    Adam and Tree 感觉非常巧妙的一题.. 如果对于一个已经建立完成的树, 那么我们可以用dp[ i ]表示染完 i 这棵子树, 并给从fa[ i ] -> i的条边也染色的最少颜色数. ...

  3. Codeforces 1101F Trucks and Cities dp (看题解)

    Trucks and Cities 一个很显然的做法就是二分然后对于每个车贪心取check, 这肯定会TLE, 感觉会给人一种贪心去写的误导... 感觉有这个误导之后很难往dp那个方向靠.. dp[ ...

  4. Codeforces 750E New Year and Old Subsequence 线段树 + dp (看题解)

    New Year and Old Subsequence 第一感觉是离线之后分治求dp, 但是感觉如果要把左边的dp值和右边的dp值合起来, 感觉很麻烦而且时间复杂度不怎么对.. 然后就gun取看题解 ...

  5. Codeforces 865C Gotta Go Fast 二分 + 期望dp (看题解)

    第一次看到这种骚东西, 期望还能二分的啊??? 因为存在重置的操作, 所以我们再dp的过程中有环存在. 为了消除环的影响, 我们二分dp[ 0 ][ 0 ]的值, 与通过dp得出的dp[ 0 ][ 0 ...

  6. Codeforces 513E2 Subarray Cuts dp (看题解)

    我们肯定要一大一小间隔开来所以 把式子拆出来就是类似这样的形式 s1 - 2 * s2 + 2 * s3 + ...... + sn 然后把状态开成四个, 分别表示在顶部, 在底部, 在顶部到底部的中 ...

  7. Codeforces 983C Elevator dp (看题解)

    Elevator 怎么今天写啥题都不会写啊, 我是傻了吗.. 把电梯里面四个人的目标点当作状态, 然后暴力转移. #include<bits/stdc++.h> #define LL lo ...

  8. Codeforces 744C Hongcow Buys a Deck of Cards 状压dp (看题解)

    Hongcow Buys a Deck of Cards 啊啊啊, 为什么我连这种垃圾dp都写不出来.. 不是应该10分钟就该秒掉的题吗.. 从dp想到暴力然后gg, 没有想到把省下的红色开成一维. ...

  9. Codeforces 498B Name That Tune 概率dp (看题解)

    Name That Tune 刚开始我用前缀积优化dp, 精度炸炸的. 我们可以用f[ i ][ j ] 来推出f[ i ][ j + 1 ], 记得加加减减仔细一些... #include<b ...

随机推荐

  1. 如何:配置 ClickOnce 信任提示行为

    转载链接:https://technet.microsoft.com/zh-cn/magazine/ee308453 可以配置 ClickOnce 信任提示以控制是否允许最终用户选择安装 ClickO ...

  2. python学习第16天。

    内置函数是在原本已经有的序列的基础上,再生成新的. List的方是修改原列表. 内置函数中大部分函数的返回值大部分都是迭代器.生成器. Sorted需要遍历操作,不是单纯的迭代,所以不生成迭代器. 一 ...

  3. 常见的SQL调优(SQL Tuning)Tips

    建立适当的索引(参考<正确建立数据库索引的姿势>)   用UNION替换OR (适用于索引列)   用exist.not exist代替 in.not in   不要以字符格式声明数字(会 ...

  4. python字符串,列表常用操作

    24天养成一个好习惯,第五天! 一.字符串需要掌握的操作 1.取值(索引取值)需要注意的是只能取,不能改 msg = 'hello world' print(msg[4]) 2.切片(顾头不顾尾) m ...

  5. 在前台根据传过来的XX级别的数字转XX的名字

    需求描述:进入页面,展示列表,列表中有个XX级别的项,数据库中的级别使用1234来存放的,现在要转成对应的一级XX,二级XX,三级XX,四级XX. 吐槽一下:正常的做法应该是在后台,就把查出来的级别1 ...

  6. C#概念总结(一)

    1.C#程序的框架问题 首先是命名的空间申明   (NameSpace delclaration) 一个 ClASS class 方法 class属性 一个main 的方法 语句(Statement) ...

  7. 解决linux下svn update 产生Node remains in conflict的问题

    提交一个文件 服务器上死活更新不了 是因为有冲突,解决办法:svn revert --depth=infinity /var/SvnProject/APITest 再次执行更新 进有改动的文件夹,更新 ...

  8. PyCharm+SVN

    首先电脑安装svn,并且确svn/bin下面有svn.exe文件 没有bin/svn.exe解决方法: 重新打开TortoiseSVN安装文件-Modify-Next后在command line cl ...

  9. GetSystemInfo()

    关于“GetSystemInfo()”的详细信息,参考:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724381(v=vs.8 ...

  10. Unnamed namespaces

    Unnamed namespaces The unnamed-namespace-definition is a namespace definition of the form   inline(o ...