AtCoder竞赛讲解_ABC310F(Bit + DP)
2023-07-20 15:51 作者:Clayton_Zhou | 我要投稿
AC代码:
https://atcoder.jp/contests/abc310/submissions/43767945
题意:
我们有N个骰子。对于每个i=1,2,…,N,当
第i个骰子被抛出,得到一个介于1和Ai之间的随机整数,包括1和Ai,具有相等的概率。
求出当N个骰子同时投掷时满足以下条件的概率,取模99824353。
有一种方法可以选择N个骰子中的一些(可能是全部),使它们的结果之和为10。
题解:
Bit DP
通过将集合与一个整数关联来标记集合。
这里处理的集合{0,1,2,...,9,10}
1<=> {0}, 2<=> {1}, 3<=> {0,1}, 4<=> {2}, 5<=> {0,2}, 6<=> {1,2}, 7<=> {0,1,2},...
dp[i][j]: 当掷下第i个骰子时,可获得整数集为S(用j表示), 的概率。
注意,如果第一个骰子为1,第二个骰子为2,则3属于S
如果j=7 表示 {0,1,2}, 第i个骰子为1,则得到集合 j|j<<1, 即15表示 {0,1,2,3}
如果第i个骰子为2,则得到集合 j|j<<2, 即31表示 {0,1,2,3,4}
如果第i个骰子为3,则得到集合 j|j<<3, 即63表示 {0,1,2,3,4,5}
如果第i个骰子为4,则得到集合 j|j<<4, 即119表示 {0,1,2, 4,5,6}
... ...