采矿
题号:NC263970
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

oldherd 是一名矿工。为了激励他工作,除了基础工资以外,老板还会将他采矿的一部分收益作为提成给予奖励。因此,oldherd 需要制定一个详细的计划,来确保他的总酬金(基础工资加上提成)具有最大化的期望。

形式化地来讲,在 n 天中,每一天 oldherd 都可以选择做矿工或者旷工。我们定义 X^{(i)} 为截止第 i 天结束时的挖矿收益。初始时,X^{(0)}=0。如果在第 i 天选择采矿,将会使挖矿收益增加 a_i,即 X^{(i)} \gets X^{(i-1)} + a_i。如果选择旷工,则挖矿收益不变,即 X^{(i)} \gets X^{(i-1)}

但是采矿是一项极具危险性的工作。在第 i 天时,有 p_i 的概率发生矿难。如果在第 i 天发生矿难,且在这一天 oldherd 选择了下矿,即便他拥有(鹿目)圆神的护佑,不会受伤。但在这一天结束时,过去累积的挖矿收益会全部清空,即 X^{(i)} \gets 0。由于不会受伤,他之后的每天依然可以选择去采矿。

老板毕竟是老板,他会等概率地选择 n 天中的 k 天时间,在这 k 天中他会派人来矿上监工。如果 oldherd 在老板派人来监工的任意一天中选择了旷工,oldherd 就会被开除,且被扣除全部酬金。

反之,如果 oldherd 旷工的每一天都没有被发现,他就可以顺利获得老板给出的基础工资 C 和第 n 天结束时挖矿收益的 \frac{1}{5},即 C + \frac{1}{5}X^{(n)} 作为总酬金。

现在一切都还没有发生,oldherd 打算让你为他制定一个最优计划,提前决定好 n 天中的每一天是否采矿,并最大化总酬金的期望。

由于 oldherd 并不能确定老板会有多少天派人来监工,你需要对于所有的 k \in \{0,1,2,\dots,n\},输出最优方案下的期望总酬金 E_{\max}^{(k)}\left[C + \frac{1}{5}X^{(n)}\right]

输入描述:

输入的第一行为两个空格分隔的非负整数 n (1 \leq n \leq 5,000)C (0 \leq C \leq 1,000),分别表示工作天数和基础工资。

第二行 n 个空格分隔的非负整数 a_i (0 \leq a_i \leq 1,000),含义如题目描述中所示。

第三行 n 个空格分隔的非负整数 p_i (0 \leq p_i \leq 1,000),表示第 i 天发生矿难的概率为 \frac{p_i}{1000}

输出描述:

输出 n + 1 行,每行一个实数,分别表示 E_{\max}^{(0)}, E_{\max}^{(1)}, E_{\max}^{(2)}, \cdots, E_{\max}^{(n)}

当且仅当与标准答案的相对误差或绝对误差不大于 10^{-6} 时,你的答案被视为正确。
示例1

输入

复制
3 0
1 1 1
10 900 100

输出

复制
0.358200000
0.238800000
0.215820000
0.215820000