题目链接: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的更多相关文章

  1. POJ 2096 Collecting Bugs 期望dp

    题目链接: http://poj.org/problem?id=2096 Collecting Bugs Time Limit: 10000MSMemory Limit: 64000K 问题描述 Iv ...

  2. POJ 2096 Collecting Bugs (概率DP,求期望)

    Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material stu ...

  3. Poj 2096 Collecting Bugs (概率DP求期望)

    C - Collecting Bugs Time Limit:10000MS     Memory Limit:64000KB     64bit IO Format:%I64d & %I64 ...

  4. poj 2096 Collecting Bugs 概率dp 入门经典 难度:1

    Collecting Bugs Time Limit: 10000MS   Memory Limit: 64000K Total Submissions: 2745   Accepted: 1345 ...

  5. poj 2096 Collecting Bugs (概率dp 天数期望)

    题目链接 题意: 一个人受雇于某公司要找出某个软件的bugs和subcomponents,这个软件一共有n个bugs和s个subcomponents,每次他都能同时随机发现1个bug和1个subcom ...

  6. POJ 2096 Collecting Bugs (概率DP)

    题意:给定 n 类bug,和 s 个子系统,每天可以找出一个bug,求找出 n 类型的bug,并且 s 个都至少有一个的期望是多少. 析:应该是一个很简单的概率DP,dp[i][j] 表示已经从 j ...

  7. poj 2096 Collecting Bugs(期望 dp 概率 推导 分类讨论)

    Description Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other ...

  8. 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< ...

  9. poj 2096 Collecting Bugs 【概率DP】【逆向递推求期望】

    Collecting Bugs Time Limit: 10000MS   Memory Limit: 64000K Total Submissions: 3523   Accepted: 1740 ...

随机推荐

  1. 对Date的扩展,将 Date 转化为指定格式的String

    <script language="javascript" type="text/javascript"><!-- /** * 对Date的扩 ...

  2. React学习之受控和非受控组件

    受控组件是通过事件完成对元素value的控制,反之就是非受控组件. 1.受控组件的value通过onChange事件来改变,非受控不需要通过事件来改变value. 2.受控组件通过事件通过setSta ...

  3. tf树

    tf变换(1)   TF库的目的是实现系统中任一个点在所有坐标系之间的坐标变换,也就是说,只要给定一个坐标系下的一个点的坐标,就能获得这个点在其他坐标系的坐标. 使用tf功能包,a. 监听tf变换:  ...

  4. snmp默认团体名/弱口令漏洞及安全加固

    0x00基础知识 简单网络管理协议(SNMP)被广泛用于计算机操作系统设备.网络设备等领域监测连接到网络上的设备是否有任何引起管理上关注的情况.在运行SNMP服务的设备上,若管理员配置不当运行默认团体 ...

  5. request 解决中文乱码问题

    package request; import java.io.IOException;import javax.servlet.ServletException;import javax.servl ...

  6. Python 时间格式化(转)

    From:http://www.cnblogs.com/65702708/archive/2011/04/17/2018936.html http://www.wklken.me/posts/2015 ...

  7. oracle角色(role)概念

    一个角色是一组特权,它可以授权给用户或其它角色. 特权有:create table,select on boss ,create session,insert on boss,update on bo ...

  8. CGI模式下的bug

    一般情况下$_SERVER['PHP_SELF']  与 $_SERVER['SCRIPT_NAME']  没有什么区别,但是如果PHP是以CGI模式运行的话两者就有差异 建议使用$_SERVER[' ...

  9. BeeFramework 系列二 UISignal篇下

    本文转载至 http://www.apkbus.com/android-126129-1-1.html     qihoo2 该用户从未签到 156 主题 156 帖子 1826 积分 Android ...

  10. Java泛型【转】

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: public class GenericTest { public static void main(String[] a ...