POJ 2096 Collecting Bugs:期望dp
题目链接:http://poj.org/problem?id=2096
题意:
有一个程序猿,他每天都会发现一个bug。
bug共有n个种类。属于某一个种类的概率为1/n。
有s个子系统,每个bug属于一个系统。属于某一个系统的概率为1/s。
问你发现的bug能够覆盖到n个种类和s个系统的期望天数。
题解:
期望dp转移的套路:
倒着推。
利用性质:期望 = ∑ (P(子期望)*φ(子期望))
状态表示:
dp[i][j] = expectation
i:覆盖到i个种类
j:覆盖到j个系统
dp:从当前状态到达目标状态的期望天数(此状态的剩余天数)
如何转移:
套路。先考虑它能够转移到的子期望。
now: dp[i][j]
四种转移:
(1)dp[i][j]:bug的没有覆盖新的区域。概率p0' = (i/n)*(j/s)
(2)dp[i+1][j]:bug为新种类,不是新系统。概率p2 = (n-i)/n * j/s.
(3)dp[i][j+1]:bug不是新种类,是新系统。概率p3 = i/n * (s-j)/s.
(4)dp[i+1][j+1]:既是新种类,又是新系统。概率p4 = (n-i)/n*(s-j)/s
利用期望性质:
dp[i][j] = dp[i][j]*(i/n)*(j/s)
+ dp[i+1][j]*((n-i)/n)*(j/s)
+ dp[i][j+1]*(i/n)*((s-j)/s)
+ dp[i+1][j+1]*((n-i)/n)*((s-j)/s)
+ 1
因为找到一个bug意味着过去了一天,所以dp[i][j]最后要+1。
移项:
dp[i][j] = (dp[i+1][j]*((n-i)/n)*(j/s)
+ dp[i][j+1]*(i/n)*((s-j)/s)
+ dp[i+1][j+1]*((n-i)/n)*((s-j)/s) + 1)
/ (1 - (i/n)*(j/s))
边界条件:
达到目标状态时,剩余天数为0。
dp[n][s] = 0
AC Code:
// state expression:
// dp[i][j] = expectation
// i: found i kinds of bug
// j: in j different sys
//
// find the answer:
// ans = dp[n][s]
//
// transferring:
// dp[i][j] = dp[i][j]*(i/n)*(j/s)
// + dp[i+1][j]*((n-i)/n)*(j/s)
// + dp[i][j+1]*(i/n)*((s-j)/s)
// + dp[i+1][j+1]*((n-i)/n)*((s-j)/s) + 1
//
// dp[i][j] = (dp[i+1][j]*((n-i)/n)*(j/s)
// + dp[i][j+1]*(i/n)*((s-j)/s)
// + dp[i+1][j+1]*((n-i)/n)*((s-j)/s) + 1)
// / (1 - (i/n)*(j/s))
//
// boundary:
// dp[n][s] = 0
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 1005
#define MAX_S 1005 using namespace std; int n,s;
double dp[MAX_N][MAX_S]; void read()
{
cin>>n>>s;
} void solve()
{
memset(dp,,sizeof(dp));
for(int i=n;i>=;i--)
{
for(int j=s;j>=;j--)
{
if(i==n && j==s) continue;
double p1=(double)(n-i)/n*j/s;
double p2=(double)i/n*(s-j)/s;
double p3=(double)(n-i)/n*(s-j)/s;
double p0=1.0-(double)i/n*j/s;
dp[i][j]=(dp[i+][j]*p1+dp[i][j+]*p2+dp[i+][j+]*p3+)/p0;
}
}
} void print()
{
printf("%.4f\n",dp[][]);
} int main()
{
read();
solve();
print();
}
POJ 2096 Collecting Bugs:期望dp的更多相关文章
- POJ 2096 Collecting Bugs 期望dp
题目链接: http://poj.org/problem?id=2096 Collecting Bugs Time Limit: 10000MSMemory Limit: 64000K 问题描述 Iv ...
- POJ 2096 Collecting Bugs (概率DP,求期望)
Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material stu ...
- Poj 2096 Collecting Bugs (概率DP求期望)
C - Collecting Bugs Time Limit:10000MS Memory Limit:64000KB 64bit IO Format:%I64d & %I64 ...
- poj 2096 Collecting Bugs 概率dp 入门经典 难度:1
Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 2745 Accepted: 1345 ...
- poj 2096 Collecting Bugs (概率dp 天数期望)
题目链接 题意: 一个人受雇于某公司要找出某个软件的bugs和subcomponents,这个软件一共有n个bugs和s个subcomponents,每次他都能同时随机发现1个bug和1个subcom ...
- POJ 2096 Collecting Bugs (概率DP)
题意:给定 n 类bug,和 s 个子系统,每天可以找出一个bug,求找出 n 类型的bug,并且 s 个都至少有一个的期望是多少. 析:应该是一个很简单的概率DP,dp[i][j] 表示已经从 j ...
- poj 2096 Collecting Bugs(期望 dp 概率 推导 分类讨论)
Description Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other ...
- poj 2096 Collecting Bugs && ZOJ 3329 One Person Game && hdu 4035 Maze——期望DP
poj 2096 题目:http://poj.org/problem?id=2096 f[ i ][ j ] 表示收集了 i 个 n 的那个. j 个 s 的那个的期望步数. #include< ...
- poj 2096 Collecting Bugs 【概率DP】【逆向递推求期望】
Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 3523 Accepted: 1740 ...
随机推荐
- 微信小程序 - 传参的几种方式
1. navigator navigator?第一参数&第二参数 .... 在传递页面的options可以拿到传递过来的参数 <navigator url='start-test/sta ...
- Hadoop实战: Linux报 tmp 磁盘存储不足
Linux 权限真是一大堆呀.在Linux下进行试验,突然来了个tmp磁盘存储不足..... .. .. ..... ... . 然而.我却没有权限给tmp添加容量.......... .. . 仅仅 ...
- 我如何添加一个空目录到Git仓库?
新建了一个仓库,只是创建一些目录结构,还不里面放什么,要放的内容还没有,还不存在,应该怎么办呢? Git 是不跟踪空目录的,所以需要跟踪那么就需要添加文件! 也就是说 Git 中不存在真正意义上的空目 ...
- iphone手机分辨率--持久维护
6.5英寸 —— 1242 x 2688 px —— Xs Max 6.1英寸 —— 828 x 1792 px —— XR 5.8英寸 —— 1125 x 2436 px —— X/Xs 5.5英寸 ...
- PHP如何识别系统语言或浏览器语言
preg_match('/^([a-z\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches); $lang = $matches[1]; switc ...
- Silverlight 5 Grid组的MouseLeave响应
用Silverlight 5作个用户控件,即是用Grid画几个格子.分别显示几张透明图片.效果是显示中间那张,点击显示的图片后将其他几张图片一起显示出来,鼠标立马这个用户控件范围后自己主动隐藏点击后显 ...
- ASP.NET动态网站制作(4)--css(3)
前言:这节课主要运用前面所学的知识写三个例子,并且学习浏览器兼容性的解决方法. 内容: 例子1:一个关于列表的例子 html代码: <!DOCTYPE html PUBLIC "-// ...
- android Bluetooth-蓝牙
bluetooth 一.开启蓝牙 1.获取BluetoothAdapter BluetoothAdapter.getDefaultAdapter() 2.判断手机设备是否 有蓝牙模块 3.开启蓝牙设备 ...
- C#多线程学习(六) 互斥对象
如何控制好多个线程相互之间的联系,不产生冲突和重复,这需要用到互斥对象,即:System.Threading 命名空间中的 Mutex 类. 我们可以把Mutex看作一个出租车,乘客看作线程.乘客首先 ...
- Xshell 连接centOS虚拟机、centOS内置python版本升级
Xshell 连接虚拟机 前置条件:VMware Workstation 12.5.1.Xshell 5 . centOS 6.6 1.打开虚拟机,输入用户名和密码: 2.输出命令:ifconfig ...