概率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 ...
- JavaScript与C# Windows应用程序交互方法
一.建立网页 <html> <head> <meta http-equiv="Content-Language" content=&quo ...
- ELK日志系统:Elasticsearch+Logstash+Kibana+Filebeat搭建教程
ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程 系统架构 安装配置JDK环境 JDK安装(不能安装JRE) JDK下载地址:http://www.orac ...
- 「NOI2013」小 Q 的修炼 解题报告
「NOI2013」小 Q 的修炼 第一次完整的做出一个提答,花了半个晚上+一个上午+半个下午 总体来说太慢了 对于此题,我认为的难点是观察数据并猜测性质和读入操作 我隔一会就思考这个sb字符串读起来怎 ...
- 【学习笔记】JS知识点整理
1 原型/原型链 1-1 原型 定义:原型是function对象的一个属性,定义了构造函数制造出的对象的公共祖先.通过该构造函数产生的对象,可以继承该原型的属性和方法. 原型是一个对象. 可以利用原型 ...
- CF 1145 (愚人节比赛)
D题 题目就是让你找出题面中拼错的单词,拼错的字母组合成一句话就是正确的题面. two plus xor of third and min elements #include<bits/stdc ...
- 构建一个maven聚合类型的横向可扩展项目
那个时候初入java这个大家庭,学习的方向很乱.毕业后,在公司磨练了一年,总想着是该交一份答卷了,可能成绩不会很好,但求及格!那么考试题目呢,我计划搭建一个横向可扩展的项目,可以在平台自扩展各种子项目 ...
- GetFontResourceInfo 函数: 获取字体文件对应的字体名
在 win 7, gdi32.dll,找不到 GetFontResourceInfo(), 但能找到 GetFontResourceInfoW(), 用法类似. //----------------- ...
- Css(常用的特殊效果)
一.前言 不得不说css真强大,总结了几个常用的css特殊效果 二.主要内容 1.几个特殊效果 $green = #02a774; $yellow = #F5A100; $bc = #e4e4e4; ...
- jquery-防多店铺购物车结算全选,单选,及删除,价格计算
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...