概率DP主要用于求解期望、概率等题目。

转移方程有时候比较灵活。

一般求概率是正推,求期望是逆推。通过题目可以体会到这点。

poj2096:Collecting Bugs

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
#include <math.h>
typedef long long ll;
using namespace std;
#define mod 1000000007
double dp[][];
int n,s;
int main()
{
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]=(n*s+i*(s-j)*dp[i][j+]+(n-i)*j*dp[i+][j]+(n-i)*(s-j)*dp[i+][j+])/(n*s-i*j);
}
}
printf("%.4f\n",dp[][]);
}
return ;
}
//http://www.cnblogs.com/jackge/archive/2013/05/21/3091757.html

sdut2626题目: The number of steps

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
#include <math.h>
typedef long long ll;
using namespace std;
#define mod 1000000007
int n;
double dp[][];
double a,b,c,d,e;
int main()
{
while(scanf("%d",&n)!=EOF&&n!=)
{
scanf("%lf%lf",&a,&b);
scanf("%lf%lf%lf",&c,&d,&e);
memset(dp,,sizeof(dp));
dp[n][]=;
for(int i=;i<=n;i++)
{
dp[n][i]=dp[n][i-]+;
}
for(int i=n-;i>=;i--)
{
for(int j=;j<=i;j++)
{
if(j==)
{
if(i==n) continue;
dp[i][j]=dp[i+][j]*a+dp[i+][j+]*b+1.0;
}
else
{
dp[i][j]=dp[i][j-]*e+dp[i+][j]*c+dp[i+][j+]*d+1.0;
}
}
}
printf("%.2lf\n",dp[][]);
}
return ;
}

HDU4405:

题目大意:

 
跳棋有0~n个格子,每个格子X可以摇一次色子,色子有六面p(1=<p<=6),概率相等,可以走到X+p的位置,有些格子不需要摇色子就可以直接飞过去。问从0出发到达n或超过n摇色子的次数的期望。
 
解题思路:
 
dp[i]表示从i出发到达最终位置的次数期望。
 
转移方程当i需要摇色子时,dp[i]=Σ(1+dp[i+j])(1<=j<=6);否则dp[i]=dp[jump[i]] 表示从i能够跳得到的最大位置。
 
预处理后面的6个位置,直接转移就行。
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <queue>
#include <vector>
#include <algorithm>
#include <queue>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int n,m;
int path[];
double dp[];
int main()
{
int xx,yy;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==&&m==) break;
memset(path,-,sizeof(path));
for(int i=;i<=m;i++)
{
scanf("%d%d",&xx,&yy);
path[xx]=yy;
}
for(int i=n;i>=;i--)
{
if(path[i]!=-)
{
int j=path[i];
if(path[j]!=-)
path[i]=path[j];
else path[i]=j;
}
}
for(int i=;i<;i++)
dp[n+i]=;
for(int i=n-;i>=;i--)
{
if(path[i]!=-)
dp[i]=dp[path[i]];
else
{
double tt=;
for(int j=;j<=;j++)
{
tt+=dp[i+j]*(1.0/6.0);
}
dp[i]=+tt;
}
}
printf("%.4f\n",dp[]);
}
return ;
}

概率dp入门的更多相关文章

  1. HDU 3853 LOOPS 概率DP入门

    LOOPS Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others)Total Sub ...

  2. HDU 4405:Aeroplane chess(概率DP入门)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=4405 Aeroplane chess Problem Description   Hzz loves ...

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

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

  4. 概率DP入门学习QAQ

    emmmm博客很多都烂尾了...但是没空写..先写一下正在学的东西好了 概率DP这东西每次考到都不会..听题解也是一脸懵逼..所以决定学习一下这个东东..毕竟NOIP考过...比什么平衡树实在多了QA ...

  5. 洛谷P2719 搞笑世界杯 题解 概率DP入门

    作者:zifeiy 标签:概率DP 题目链接:https://www.luogu.org/problem/P2719 我们设 f[n][m] 用于表示还剩下n张A类票m张B类票时最后两张票相同的概率, ...

  6. POJ 2096-Collecting Bugs(概率dp入门)

    题意: 有n种bug和s种系统bug,每天发现一种bug(可能已经发现过了)所有种bug被发现的概率相同,求所有bug被发现的期望天数. 分析: dp[i][j]发现i种bug,j种系统bug期望天数 ...

  7. HDU 3853-loop(概率dp入门)

    题意: r*c个方格,从(1,1)开始在每个方格可释放魔法(消耗能量2)以知,释放魔法后可能在原地.可能到达相邻的下面格子或右面格子,给出三者的概率 求要到达(R,C)格子,要消耗能量的期望值. 分析 ...

  8. hdu4405概率dp入门

    Aeroplane chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  9. hdu3853之概率dp入门

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xingyeyongheng/article/details/25205693 LOOPS Time ...

随机推荐

  1. loadView、viewDidLoad及viewDidUnload的关系

      标题中所说的3个方法,都是UIViewController的方法,跟UIViewController的view属性的生命周期息息相关.接下来我会一一阐述它们的作用以及它们之间的联系. loadVi ...

  2. 校内OJ 1128 词链(link)(Trie+DFS)

    1128: 词链(link) 时间限制: 1 Sec  内存限制: 64 MB 提交: 23  解决: 7 [提交][状态][讨论版] 题目描述 给定一个仅包含小写字母的英文单词表,其中每个单词最多包 ...

  3. Tesla-> Fermi (550Ti) -> Kepler(680) -> Maxwell (750Ti) -> Volta(was Pascal)

    Pascal GPU Pascal (from French mathematician Blaise Pascal) is Maxwell successor. In this news, we l ...

  4. PHP 开启短标签

    <?=STATIC_URL?> 让上面的语句可以正常运行,等同于下面的语句 <?php echo STATIC_URL;?> 可以在 php.ini 中找到 short_ope ...

  5. WEB-INF目录下的jsp页面如何访问?

    只能在sevlet(或者spring的control,struts的action,本质都是sevlet)中访问也就是只能通过java后台访问,这里web-inf下的内容是不对外开放的/安全的,不能通过 ...

  6. Android 调用资源字符串的几种方法

    在 Layout XML 调用字符串资源: <TextView android:layout_width="fill_parent" android:layout_heigh ...

  7. 【No.3 Ionic】超级逗表情 App

    本人使用Ionic框架开发了一个 超级逗表情 的App 依赖插件 cordova-plugin-app-version 0.1.9 "AppVersion" cordova-plu ...

  8. 【运维工具】logrotate 日志管理神器

    服务器经常会产生各种各样的日志文件,我们需要定期清理 日志的分类 系统日志 应用日志 系统日志 例如系统的history 历史信息   crontab的运行日志  一般系统日志系统都帮我们运维好了,不 ...

  9. jquery_easyui的使用

    一.引入jquery,jquery_easyui,jquery_easyui css,图标css,本地语言 二.通过学习jquery_easyui 手册,用简单的js代码来实现(按钮.表单.表格.弹出 ...

  10. android硬件调试之无法识别android设备解决办法

    DDMS 中无法识别华为荣耀六手机,  用豌豆荚开始显示无法连接,  用豌豆荚安装完驱动后,就可以连接了 http://www.zhihu.com/question/30588024 http://w ...