容易发现对于这样抽卡或者转转盘的题目,都是先使劲随机达到一个临界值在进行定点操作。

对于这个题目,显然应该先抽卡再去买卡,因为如果抽到了已经买过的卡就会直接损失 x2\frac{x}{2} 的碎片。

设 EiE_i 表示抽了 ii 张不同的卡的期望操作次数,考虑分情况讨论随机抽一张新卡的操作次数:

  • 抽到了已有的卡,概率为 in\frac{i}{n},还需要继续抽。
  • 抽到了新的卡,概率为 n−in\frac{n-i}{n},操作就结束了。

那么显然有:

Ei=in×(Ei+x2)+n−in×(Ei−1+x)E_i=\frac{i}{n}\times (E_i+\frac{x}{2})+\frac{n-i}{n}\times (E_{i-1}+x)

化简之后有:

Ei−Ei−1=(nn−i+1)×x2E_{i}-E_{i-1}=(\frac{n}{n-i}+1)\times\frac{x}{2}

所以我们就得到了已有 ii 张后抽出一张的卡的操作的代价为 (nn−i+1)×x2(\frac{n}{n-i}+1)\times\frac{x}{2}。

如果要新买一张卡,那么肯定后面所有的卡都要全部买,那么假设后面还有价值为 sumsum 的卡没有买,那么新获得一张卡的期望就是 sumn−i\frac{sum}{n-i}。

因为 ∑i=1nci≤104\sum\limits_{i=1}^n c_i\le 10^4 所以,考虑直接设 fi,jf_{i,j} 表示抽出了 ii 张卡已有的价值为 jj 时候的方案数。

那么显然有转移方程:

fj+1,k+ai←fj+1,k+ai+fj,kf_{j+1,k+a_i}\gets f_{j+1,k+a_i}+f_{j,k}

这样转移是为了避免重复的选择一个碎片。

显然,出现一个情况 (i,j)(i,j) 的概率为 fi,j(in)\frac{f_{i,j}}{i\choose n}。

根据期望等于概率乘以权值,答案显然为:

∑i=0n−1∑j=0smin⁡(s−jn−i,(nn−i+1)×x2)×fi,j(in)\sum\limits_{i=0}^{n-1}\sum\limits_{j=0}^{s}\min(\frac{s-j}{n-i},(\frac{n}{n-i}+1)\times\frac{x}{2})\times \frac{f_{i,j}}{i\choose n}