P0866

[SCOI2006]zh_tree

[SCOI2006]zh_tree

张老师根据工作需要,设计了一种特殊的二叉搜索树,并将其命名为 zh_tree。

一棵具有 nn 个结点的 zh_tree,其中序遍历恰好为 (1,2,3,…,n)(1,2,3,\ldots,n),数字 1,2,3,…,n1,2,3,\ldots,n 分别为各结点的编号。这 nn 个结点对应一组学术论文中出现的 nn 个不同单词。

第 jj 个单词在这组论文中出现的次数记为 djd_j。例如,d2=10d_2=10 表示第 22 个结点所对应的单词在这组论文中出现了 1010 次。设这组论文中出现的单词总数为 SS,则

S=d1+d2+⋯+dn。S=d_1+d_2+\cdots+d_n。

记

fj=djSf_j=\frac{d_j}{S}

为第 jj 个单词在这组论文中出现的概率,即出现频率。

张老师规定根结点的深度为 00。如果第 jj 个结点的深度为 rr,则访问该结点的代价 hjh_j 为

hj=k(r+1)+c,h_j=k(r+1)+c,

其中 k,ck,c 是已知的、不超过 100100 的正实数。

zh_tree 是满足上述中序遍历要求,并使平均访问代价

h1f1+h2f2+⋯+hnfnh_1f_1+h_2f_2+\cdots+h_nf_n

达到最小的二叉树。

请根据给定数据,求出访问 zh_tree 的最小平均代价。

输入格式

第一行包含三个用空格分隔的数 n,k,cn,k,c。其中,nn 为正整数,k,ck,c 为正实数。

第二行包含 nn 个用空格分隔的正整数 d1,d2,…,dnd_1,d_2,\ldots,d_n,分别表示每个单词出现的次数。

输出格式

输出一行一个实数,保留 33 位小数,表示访问 zh_tree 的最小平均代价。

样例输入

4 2 3.5
20 30 50 20

样例输出

7.000

数据范围

  • n≤30n\le 30,且 nn 为正整数;
  • k,c≤100k,c\le 100,且 k,ck,c 为正实数;
  • 1≤dj≤2001\le d_j\le 200,且 djd_j 为正整数。

来源与许可

本题为 SCOI 2006 试题「zh_tree」,题面与测试数据整理自 BZOJ。

样例 1

输入

4 2 3.5
20 30 50 20

输出

7.000