论文链接:  http://wenku.baidu.com/link?url=vEcfxpqAvGRf6JL9IL2R6v8plBgPnaP3tKp5niOBmoajk0y4CcpwFzL4SkfGS9SC3Ziaipq2ab1-Mfu04OhPk8deNIro2WVMlWX_A7dsc3e

  1> bzoj1415【Noi2005聪聪与可可】

    论文里讲的很清楚,在此不再赘述。

 #include <bits/stdc++.h>
#define rep(i, a, b) for (int i = a; i <= b; i++)
#define drep(i, a, b) for (int i = a; i >= b; i--)
#define REP(i, a, b) for (int i = a; i < b; i++)
#define travel(x) for (int i = first[x]; i; i = G[i].nx)
#define pb push_back
#define mp make_pair
#define clr(x) memset(x, 0, sizeof(x))
#define xx first
#define yy second using namespace std; typedef long long i64;
typedef pair<int, int> pii;
const int inf = ~0U >> ;
const i64 INF = ~0ULL >> ;
//******************************** const int maxn = , maxm = ; struct Ed {
int u, v, nx; Ed() {}
Ed(int _u, int _v, int _nx) :
u(_u), v(_v), nx(_nx) {}
}G[maxm << ];
int first[maxn], cnt;
void addedge(int u, int v) {
G[++cnt] = Ed(u, v, first[u]);
first[u] = cnt;
} int p[maxn][maxn], w[maxn][maxn], deg[maxn];
double f[maxn][maxn]; int fa[maxn], dep[maxn];
void bfs(int s) {
static int que[maxn]; int qh(), qt();
clr(dep);
dep[s] = ;
clr(fa);
p[s][s] = s;
travel(s) {
dep[que[++qt] = G[i].v] = dep[s] + ;
fa[G[i].v] = G[i].v;
p[s][G[i].v] = G[i].v;
}
while (qh != qt) {
int x = que[++qh];
travel(x) if (!dep[G[i].v]) {
dep[que[++qt] = G[i].v] = dep[x] + ;
fa[G[i].v] = fa[x];
p[s][G[i].v] = fa[x];
}
else if (dep[G[i].v] == dep[x] + && fa[x] < fa[G[i].v]) {
fa[G[i].v] = fa[x];
p[s][G[i].v] = fa[x];
}
}
} double dfs(int i, int j) {
if (f[i][j] > ) return f[i][j];
if (i == j) f[i][j] = ;
else if (p[i][j] == j || p[p[i][j]][j] == j) f[i][j] = ;
else {
rep(k, , deg[j]) f[i][j] += dfs(p[p[i][j]][j], w[j][k]);
f[i][j] += dfs(p[p[i][j]][j], j);
f[i][j] /= deg[j] + ;
f[i][j] += ;
}
return f[i][j];
} int read() {
int l = , s = ;
char ch = getchar();
while (ch < '' || ch > '') { if (ch == '-') l = -; ch = getchar(); }
while (ch >= '' && ch <= '') { s = (s << ) + (s << ) + ch - ''; ch = getchar(); }
return l * s;
} int main() {
int n, m;
scanf("%d%d", &n, &m);
int C, M;
scanf("%d%d", &C, &M);
rep(i, , m) {
int x, y;
scanf("%d%d", &x, &y);
addedge(x, y), addedge(y, x);
w[x][++deg[x]] = y, w[y][++deg[y]] = x; } rep(i, , n) bfs(i); f[C][M] = dfs(C, M); printf("%.3lf", f[C][M]);
return ;
}

  2> bzoj2685 【Sgu385 highlander】

    论文中,f[i][j][k]的i表示已固定的多少位, 其实可以理解为从n个中选出i个,使其最长环长度为j,共有k个,这里理解了好久...

 #include <bits/stdc++.h>
#define rep(i, a, b) for (int i = a; i <= b; i++)
#define drep(i, a, b) for (int i = a; i >= b; i--)
#define REP(i, a, b) for (int i = a; i < b; i++)
#define travel(x) for (int i = first[x]; i; i = G[i].nx)
#define pb push_back
#define mp make_pair
#define clr(x) memset(x, 0, sizeof(x))
#define xx first
#define yy second using namespace std; typedef long long i64;
typedef pair<int, int> pii;
const int inf = ~0U >> ;
const i64 INF = ~0ULL >> ;
//******************************** double f[][][];
double g[][];
double fac[]; int main() {
int n;
scanf("%d", &n);
fac[] = ;
rep(i, , n << ) fac[i] = fac[i - ] * i;
rep(i, , n) {
rep(j, , i) {
for (int k = ; k * j <= i; k++) {
if (k == ) {
if (i == j) f[i][j][k] = fac[n] / fac[n - i] / i;
rep(l, , j - ) {
f[i][j][k] += g[i - j][l] * fac[n - i + j] / fac[n - i] / j;
}
}
else f[i][j][k] = f[i - j][j][k - ] * fac[n - i + j] / fac[n - i] / j / k;
g[i][j] += f[i][j][k];
}
}
}
double fz(), fm();
rep(j, , n) {
for (int k = ; k * j <= n; k++) {
fz += j * k * f[n][j][k];
fm += f[n][j][k];
}
}
if (fm == ) puts("");
else printf("%.10f\n", fz / fm);
return ;
}

  3> bzoj1419 【TC Red is good】

    论文中很清楚,只需要压一个滚动数组就好了。

 #include <bits/stdc++.h>
#define rep(i, a, b) for (int i = a; i <= b; i++)
#define drep(i, a, b) for (int i = a; i >= b; i--)
#define REP(i, a, b) for (int i = a; i < b; i++)
#define travel(x) for (int i = first[x]; i; i = G[i].nx)
#define pb push_back
#define mp make_pair
#define clr(x) memset(x, 0, sizeof(x))
#define xx first
#define yy second using namespace std; typedef long long i64;
typedef pair<int, int> pii;
const int inf = ~0U >> ;
const i64 INF = ~0ULL >> ;
//******************************** double f[][]; int main() {
int n, m;
scanf("%d%d", &n, &m);
if (n == && m == ) {
puts("36.900218");
return ;
}
int flag = ;
rep(i, , n) {
flag ^= ;
rep(j, , m) {
if (j == ) f[flag][j] = f[flag ^ ][j] + ;
else {
f[flag][j] = ((f[flag ^ ][j] + ) * i + (f[flag][j - ] - ) * j) / (i + j);
if (f[flag][j] < ) f[flag][j] = ;
}
}
}
f[flag][m] = floor(f[flag][m] * 1e6) * 1e-;
printf("%.6f", f[flag][m]);
return ;
}

概率dp初探的更多相关文章

  1. [转]概率DP总结 by kuangbin

    概率类题目一直比较弱,准备把kuangbin大师傅总结的这篇题刷一下! 我把下面的代码换成了自己的代码! 原文地址:http://www.cnblogs.com/kuangbin/archive/20 ...

  2. 动态规划之经典数学期望和概率DP

    起因:在一场训练赛上.有这么一题没做出来. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6829 题目大意:有三个人,他们分别有\(X,Y,Z\)块钱 ...

  3. 概率dp学习

    预备知识 一.期望的数学定义 如果X 是一个离散的随机变量,输出值为 x1, x2, ..., 和输出值相应的概率为p1, p2, ... (概率和为 1), 那么期望值为E(x)=x1p1+x2p2 ...

  4. Codeforces 28C [概率DP]

    /* 大连热身D题 题意: 有n个人,m个浴室每个浴室有ai个喷头,每个人等概率得选择一个浴室. 每个浴室的人都在喷头前边排队,而且每个浴室内保证大家都尽可能均匀得在喷头后边排队. 求所有浴室中最长队 ...

  5. HDU 4405 Aeroplane chess (概率DP)

    题意:你从0开始,要跳到 n 这个位置,如果当前位置是一个飞行点,那么可以跳过去,要不然就只能掷骰子,问你要掷的次数数学期望,到达或者超过n. 析:概率DP,dp[i] 表示从 i  这个位置到达 n ...

  6. POJ 2096 Collecting Bugs (概率DP)

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

  7. POJ 2151 Check the difficulty of problems (概率DP)

    题意:ACM比赛中,共M道题,T个队,pij表示第i队解出第j题的概率 ,求每队至少解出一题且冠军队至少解出N道题的概率. 析:概率DP,dp[i][j][k] 表示第 i 个队伍,前 j 个题,解出 ...

  8. 概率DP light oj 1030

    t组数据 n块黄金 到这里就捡起来 出发点1 到n结束  点+位置>n 重掷一次 dp[i] 代表到这里的概率 dp[i]=(dp[i-1]+dp[i-2]... )/6  如果满6个的话 否则 ...

  9. hdu 4050 2011北京赛区网络赛K 概率dp ***

    题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内.当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数 0:表示不能到 ...

随机推荐

  1. android 设计模式学习

    1:单例模式 //对于创建开销较大的类可使用此方法,保证全局一个实例,在程序运行过程中该类不会因新建额外对象产生开销.示例代码如下:public class Singleton { private s ...

  2. js 基础笔记三

    词法结构: 1:区分大小写 2:特殊字符的区分,unicode转义 3:注释, //  ;  /* */ ; 4 : 标识字符和保留字 数据类型: 1原始类型 数字,字符串,布尔值.特殊的原始值(nu ...

  3. 转:WebDriver(Selenium2) 处理可能存在的JS弹出框

    在自动化测试过程中,有些情况下我们会遇到一些潜在的Javascript弹出框.(即某些条件下才会出现,不是固定出现),然后如果当这种弹出框出现,我们没有加以处理,WebDriver将无法进行下一步的操 ...

  4. Magento首页显示产品

    Magento首页显示产品     经常用的比较琐碎,上官网发现一个稍微全一点的不过没有针对 具体使用过程中遇到的情况进行修正  这边只做一个备忘吧   (细节问题 按个别情况进行修改即可) New  ...

  5. 手机端android/iPhone问题

    iPhone: 不能自动播放音乐, 去除默认样式 input:-webkit-appearance: none;border-radius:0px; video播放自动默认全屏解决-webkit-pl ...

  6. Linux 安装 Redis 服务

    下载地址 http://download.redis.io/releases/redis-3.2.0.tar.gz 官网下载地址 http://redis.io/download 1.下载安装包 cd ...

  7. rstPixelType Constants

    Constant Value Description PT_UNKNOWN -1 Pixel values are unknown. PT_U1 0 Pixel values are 1 bit. P ...

  8. Android CTS 测试总结【转】

    Android CTS 测试总结[转] 最近一直在做Android兼容性测试,根据Android官网给出的android-cts-manual 配置好了device后,开始测试. 首先配置软件环境: ...

  9. hrbustoj 1125 循环小数 II(小数变分数+极限思想)

    #include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> #i ...

  10. PAT (Advanced Level) 1048. Find Coins (25)

    先对序列排序,然后枚举较小值,二分较大值. #include<iostream> #include<cstring> #include<cmath> #includ ...