标签:style class blog code http tar
留坑,必填,学习kuangbin大神!!!!!加油!!
1. POJ 2096 Collecting Bugs (期望DP)
题意:我直接没看题目,看的别人题解里面的题目意思。大概就是有s个子系统,n种bug。某人每天能发现一个bug,这个bug属于一个分类,同时也属于一个子系统,每个bug属于某个子系统的概率是1/s,属于某种分类的概率是1/n 问发现n种bug,每个子系统都发现bug的天数的期望。
分析:概率dp第一题,是从kuangbin大神博客的帖子开始学习的。
题解:果然是dp太渣了,这个入门题目都搞了半天,应该说看别人题解看了半天,看完之后能推出状态转移方程式就ok了。
//转载博客http://www.cnblogs.com/zhj5chengfeng/archive/2013/03/02/2939597.html 令 f[i][j] 表示已经找到了 i 种 bug,且 j 个子系统至少包含一个 bug,距离完成目标需要的时间的期望。 目标状态是 f[0][0] 再过一天找到一个 bug 可能是如下的情况: 1. 这个 bug 的种类是 已经找到的 并且 出现在 已经找到 bug 的子系统中 2. 这个 bug 的种类是 已经找到的 并且 出现在 没有找到 bug 的子系统中 3. 这个 bug 的种类是 没有找到的 并且 出现在 已经找到 bug 的子系统中 4. 这个 bug 的种类是 没有找到的 并且 出现在 没有找到 bug 的子系统中 经过简单的分析,不难得出如下递推过程: f[i][j] = i/n*j/s*f[i][j] + i/n*(s-j)/s*f[i][j+1] + (n-i)/n*j/s*f[i+1][j] + (n-i)/n*(s-j)/s*f[i+1][j+1] 移项可得 (1-(i*j)/(n*s))f[i][j] = i/n*(s-j)/s*f[i][j+1] + (n-i)/n*j/s*f[i+1][j] + (n-i)/n*(s-j)/s*f[i+1][j+1]
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define maxn 1010 double dp[maxn][maxn]; int n,s; int main() { while(~scanf("%d %d",&n,&s)) { dp[n][s] = 0; for(int i=n;i>=0;i--) { for(int j=s;j>=0;j--) { if(i==n && j==s) continue; dp[i][j] = ( dp[i][j+1]*i*(s-j) + dp[i+1][j]*(n-i)*j + dp[i+1][j+1]*(n-i)*(s-j) + n*s )/(n*s - i*j); } } printf("%.4lf\n",dp[0][0]); } return 0; }
2. HDU 3853 LOOPS (期望DP)
题意:在一个迷宫里面,每一个格子(r,c)中有一个传送门,传送门可以把人传送到(r,c),(r+1,c),(r,c+1)三个位置的其中一个,分别有不同的概率,问从起点到R,C终点的期望是多少。
分析:和上题一样是一道求期望的DP
标签:style class blog code http tar
原文地址:http://www.cnblogs.com/BigBallon/p/3806596.html