概率dp的边界处理 POJ 2096
题目地址:https://vjudge.net/problem/POJ-2096
说的是有n个bug,和s个系统。现在一个人一天能发现一个bug,它可能是任何一个系统中的,也可能会发现已经发现过的bug。
问,他发现全部n个bug,并且s个系统中都出现bug的天数的期望。
代码是借用kuangbin大神的:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
const int MAXN=;
double dp[MAXN][MAXN]; int main()
{
int n,s;
while(scanf("%d%d",&n,&s)!=EOF)
{
dp[n][s]=;
for(int i=n;i>=;i--)
for(int j=s;j>=;j--)
{
if(i==n&&j==s)continue;
dp[i][j]=(i*(s-j)*dp[i][j+]+(n-i)*j*dp[i+][j]+(n-i)*(s-j)*dp[i+][j+]+n*s)/(n*s-i*j);
}
printf("%.4lf\n",dp[][]);//POJ上G++要改成%.4f
}
return ;
}
关于转移方程,有什么不懂的可以移步 https://www.cnblogs.com/Paul-Guderian/p/7624039.html#undefined
没什么好说的,我这只弱鸡都能看懂。。。
但我觉得需要注意的地方是代码的第18行和19行,对边界的处理,可以说没有一点多余啊。。。
注意到dp过程是从 右下角(dp[n][s]) 开始的,决定当前位置的值是它右、下、以及右下位置的值
那么左边、上边的边界自然不用考虑,可能出现溢出的位置就剩下右边,下边,以及右下角。
我们注意到程序仅在第18行处理了右下角,是不是kuangbin大神漏掉了右边和下边的处理呢?
不,事实上右边和下边的处理在计算概率的时候就已经完成了!
就拿下边来说,注意到,当且仅当 i==n 时,访问 dp[i+1][j] 时会在下边越界。
但是,注意到与这一项相乘的概率恰好包括了 (n-i) 这一因子。
因此,越界访问得到的数据( dp[n+1][j] )并不会影响 dp[i][j] 的计算结果。
可能很简单。。。
但是对我这样的弱鸡来说,我觉得挺神奇的,求大犇们勿喷。。。
概率dp的边界处理 POJ 2096的更多相关文章
- Codeforces 908D New Year and Arbitrary Arrangement(概率DP,边界条件处理)
题目链接 Goodbye 2017 Problem D 题意 一个字符串开始,每次有$\frac{pa}{pa+pb}$的概率在后面加一个a,$\frac{pb}{pa+pb}$的概率在后面加一个 ...
- 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 天数期望)
题目链接 题意: 一个人受雇于某公司要找出某个软件的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 入门经典 难度:1
Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 2745 Accepted: 1345 ...
- poj 3071 Football(概率dp)
id=3071">http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率 ...
- 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】2151:Check the difficulty of problems【概率DP】
Check the difficulty of problems Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8903 ...
- POJ 2151 Check the difficulty of problems (概率DP)
题意:ACM比赛中,共M道题,T个队,pij表示第i队解出第j题的概率 ,求每队至少解出一题且冠军队至少解出N道题的概率. 析:概率DP,dp[i][j][k] 表示第 i 个队伍,前 j 个题,解出 ...
随机推荐
- Ubuntu系统桌面任务栏和启动器全部消失解决方案
ubuntu桌面上没有启动器,没有任务栏,只有一个背景,但是运行正常.这种情况很可能是文件管理程序出现异常了. 解决办法: Ctrl+Alt+F1 进入命令行,输入: sudo service lig ...
- Spring Boot + Netty 中 @Autowired, @Value 为空解决
问题描述 使用 Spring Boot + Netty 新建项目时 Handler 中的 @Autowired, @Value 注解的始终为空值 解决方法 @Component // 1. 添加 @C ...
- springdata 动态查询之排序
- Nginx CONTENT阶段 concat模块
L67 concat_delimiter : 根据js 指定 分隔符 比如 “|” 那么每个文件分隔符为 “|” concat_types : 指定要合并文件的类型 concat_unique : s ...
- 【转载】利用window.performance.timing进行性能分析
利用window.performance.timing进行性能分析 性能分析... window.performance.timing中相关属性语义: // .navigationStart 准备 ...
- C# 将前端传来的图片文件分别以大图和缩略图保存
HttpPostedFile pic_upload = Request.Files["file"]; Bitmap bitmap = (Bitmap)System.Drawing. ...
- 题解:[JSOI2004]平衡点 / 吊打XXX
这个题目算是一个模拟退火的板子题 物重一定,绳子越短,重物越低,势能越小,势能又与物重成正比 使得$\sum_{i=1}^nd[i]*w[i]$也就是总的重力势能最小,可以使得系统平衡 交了两面半.. ...
- MongoDB常用配置项目
systemLog: destination: file logAppend: true path: /data/mongod/log/mongod-rs1.log processManagem ...
- Java动态代理实现及实际应用
一.代理的概念 动态代理技术是整个java技术中最重要的一个技术,它是学习java框架的基础,不会动态代理技术,那么在学习Spring这些框架时是只知应用不懂实现. 动态代理技术就是用来产生一个对象的 ...
- 反射与jvm