题意:
平面上有n(n≤10)n(n\leq 10)n(n≤10)个矩形,每个矩形给出左下角坐标和右上角坐标。每次操作可以随机选择一个,把这个矩形的区域涂黑。给出一个矩形,左下角是(0,0)(0,0)(0,0),右上角是(W,H)(W,H)(W,H),求把这个矩形完全涂黑的期望操作次数
Solution:
显然这是个期望dp,但涂黑的矩形我们再涂没贡献,于是考虑状压记录他,设dp[s]dp[s]dp[s]为涂黑的集合为sss时,期望把(0,0)(W,H)(0,0)(W,H)(0,0)(W,H)这个矩形完全涂黑的操作次数,期望dp,考虑事件,对于每个sss,抽取的事件有两种,第一种抽到没涂过的,第二种抽到涂过的,没涂过的又细分几种,那么转移方程为
dp[s]=popcount(s)ndp[s]+∑{ i∣((s>>i−1)&1)==0}1ndp[s∣(1<<i−1)]+1 dp[s]=\frac{popcount(s)}{n}dp[s]+\sum_{\{i|((s>>i-1)\&1)==0\}} \frac{1}{n}dp[s|(1<<i-1)]+1 dp[s]=npopcount(s)dp[s]+{ i∣((s>>i−1)&1)==0}∑n1dp[s∣(1<<i−1)]+1
移项化简就可以得到dp[s]的转移方程了
接下来就是初值的设置,如果集合sss足以涂黑,那么dp[s]=0dp[s]=0

这篇博客介绍了如何利用概率动态规划(DP)解决一个几何概率问题,即在平面上有多个矩形,求在给定的大矩形内完全涂黑的期望操作次数。博主首先提出初始思路,尝试使用容斥原理,但由于实现难度较高,转而采用扫描线和位运算的方法。通过位运算的状态压缩和转移方程,博主给出了求解该问题的算法,并提供了C++代码实现。文章最后展示了完整的代码并进行了测试。
最低0.47元/天 解锁文章
1118

被折叠的 条评论
为什么被折叠?



