这周也是学了概率dp,但是这个概率dp学的有点个模糊,感觉不是很好, 感觉这个概率dp挺难的,首先是这个概率dp没有固定的模板,然后就是要在对题目的充分理解下合理运用各种相关的概率公式,本来以为学了概率统计学这个应该还能好点,结果其实还是看不懂,
比如:2096 -- Collecting Bugs (poj.org)
这道题其实看起来还是挺好写的
他可以分为四种情况:
1.发现一个bug属于已经有的i个分类和j个系统,概率为(i/n)*(j/s);
2.发现一个bug属于已有的分类,不属于已有的系统,概率为 (i/n)*(1-j/s);
3.发现一个bug属于已有的系统,不属于已有的分类,概率为 (1-i/n)*(j/s);
4.发现一个bug不属于已有的系统,不属于已有的分类,概率为 (1-i/n)*(1-j/s);
这道题是那种看懂题目可以直接写出代码的,只要写出不同情况下的概率,然后分情况进行状态转移求期望就好了
for(int i=n; i>=0; i--)
{
for(int j=s; j>=0; j--)
{
if(i==n&&j==s) continue;
double tep=1.0;
if(i<n) tep+=(n*1.0-i)*j/(n*s)*dp[i+1][j];
if(j<s) tep+=(s*1.0-j)*i/(n*s)*dp[i][j+1];
if(i<n&&j<s) tep+=(n*1.0-i)*(s*1.0-j)/(n*s)*dp[i+1][j+1];
dp[i][j]=tep/(1-(i*j*1.0)/(s*n));
}
}
还有几道类似的:D. Bag of mice 也是只要分情况求概率就可以写出来,
那么另外一些就是题目异常难懂,根本列不出概率,就更别说状态转移了
比如:NC210481 筛子游戏
我看不太懂这写题目是要怎么列出的概率公式,看了题解感觉也是没大看明白,打算下周先做做几道题目看看练一练。