SRM144DIV1 Lottery

题意:

假设彩票选号的规则对应4个参数:int n, int C, bool sorted, bool unique,填号规则如下:

在n个位置上填数,每个数不超过C,如果sorted为true,要求这n个数非降序排列,如果unique为true,要求这n个数不能有重复的

现在给出k张彩票的填号规则,将这k张彩票获胜机率从大到小排序。

0<=n<=8,  10<=C<=100, 0<=k<=50

 

思路:计算出每种规则下每张彩票的填号可能的数目,从小到大排序,计算公式如下表

  true false
true C(C, b) A(C, n)
false ? C^b

第一行表示sorted,第一列表示unique。难点在于计算sorted==true&&unique==false的情况,考虑递推:

用f[i][j]表示前i-1位填写1-j中的数,第i位填j的可能的数目,那么

\[f[i][j]=\sum_{k=1}^{j}f[i-1][k]\]

为了降低复杂度,增加一个\(sum[i][j]=\sum_{k=1}^{j} f[i][k]\),在递推的过程中同时求出sum[i][j]。

 

posted @ 2014-02-24 12:11  努力变瘦  阅读(171)  评论(0编辑  收藏  举报