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]。