2013ACM-ICPC杭州赛区全国邀请赛——Random Walk
来源:互联网 发布:win7引导ubuntu双系统 编辑:程序博客网 时间:2024/05/16 08:41
题目链接
- 题意:
n个点,按照题中给的公式可以求出任意两个点转移的概率。求从1到n的期望转移次数 - 分析:
设dp[i]为从i到n的期望,那么可以得到公式dp[i] = sigma(dp[i + j] * p(i + j, i)) + 1,1 <= j <= m
把这个式子展开来:dp[i - m] * p(i - m, i) + dp[i - m + 1] * dp(i - m + 1, i) + ... + dp[i] * p(i, i) + ... + dp[i + m] * p(i + m, i) = dp[i]
展开p(i, i),化简:dp[i - m] * p(i - m, i) + dp[i - m + 1] * dp(i - m + 1, i) + ... + dp[i] * p‘(i, i) + ... + dp[i + m] * p(i + m, i) = -1(注意p'(i, i)和题目中有所不同了,等与p(i, i) - 1)
其实这里也可以发现,题目中的p(i, i)给的还是比较有特点的,有一个常数1,这样在列方程的时候才可以消元使得方程右边是一个常数
解方程的时候,首先注意dp[n] = 0,这个方程是不用解的。之后可以安装普通的gauss消元从上到下消元,再回代出结果;或者更简单的,题目只要求dp[1],那么如果从下到上求,最后直接除以系数即可
这个题目的一个麻烦点在于对矩阵的下标处理:对于原始矩阵a[i][j],放到p[n][m]的矩阵中,就变成了p[i][m - i + j],所以对原矩阵进行消元的时候需要注意这一点
再说一下这里的处理:对于p[i][j],转换过后就变成了a[i][m - i + j],也就是说,把a[i][i]变成p[i][m],这样就方便存储了
也算是一个概率DP吧,比较关键的想法在于能将问题分解为n个状态,之后就可以用高斯消元来解决了
高斯消元的分析时,应该注意到这个矩阵比较稀疏,且消元的时候,只需要考虑最多m行的m个位置即可,复杂度不是普通的O(n ^ 3),而是O(n * m * m)
double b[maxn];double p[maxn][15];int main(){// freopen("in.txt", "r", stdin);while (~RII(n, m) && n){FE(i, 1, n) FE(j, 1, m)RI(c[i][j]);FF(i, 1, n){double sum = 1, s = 0;FE(j, 1, m)sum += c[i][j];FE(j, 1, m){if (i - j >= 1)s += p[i][m - j] = 0.3 * c[i][j] / sum;if (i + j <= n)s += p[i][m + j] = 0.7 * c[i][j] / sum;}p[i][m] = -s;b[i] = -1;}FED(i, n - 1, 1){int l = max(1, i - m), r = min(n - 1, i + m);FF(j, l, i){double f = p[j][m - j + i] / p[i][m];FE(k, l, r)p[j][m - j + k] -= p[i][m - i + k] * f;b[j] -= f * b[i];}}printf("%.2f\n", b[1] / p[1][m]);}return 0;}
2 0
- 2013ACM-ICPC杭州赛区全国邀请赛——Random Walk
- 2013ACM-ICPC杭州赛区全国邀请赛 ——Robot
- hdu 4576 robot 2013 ACM-ICPC杭州赛区全国邀请赛——题目重现-1001-robot
- hdu 4585 Shaolin 2013 ACM-ICPC杭州赛区全国邀请赛——题目重现
- 2013 ACM-ICPC杭州赛区全国邀请赛——题目重现
- 2013ACM-ICPC杭州赛区全国邀请赛——X-Boxes
- hdu 4585 Shaolin 2013 ACM-ICPC杭州赛区全国邀请赛——题目重现
- 2013ACM-ICPC杭州赛区全国邀请赛(题目重现)
- hdu4576 Robot 2013 ACM-ICPC杭州赛区全国邀请赛 1
- hdu 4578 Transformation 2013ACM-ICPC杭州赛区全国邀请赛
- hdu4577 X-Boxes ACM-ICPC杭州赛区全国邀请赛 2
- 2013 ACM-ICPC南京赛区全国邀请赛
- hdu 4584 building-bridge 暴力的题,怎么暴力怎么干。。2013 ACM-ICPC杭州赛区全国邀请赛——题目重现
- 2013 ACM-ICPC南京赛区全国邀请赛——题目重现
- 2013 ACM-ICPC长沙赛区全国邀请赛——Travel in time
- HDU 4569 Special equations(思维)——2013 ACM-ICPC长沙赛区全国邀请赛
- 周六训练:2013 ACM-ICPC长沙赛区全国邀请赛
- HDU 4565 So Easy!(思想+矩阵快速幂)——2013 ACM-ICPC长沙赛区全国邀请赛
- 点9图 NinePatch chunk解析
- html5本地存储localstorage
- C#中获取路径的几种方法
- VC创建文件夹
- 黑马程序员---学习笔记(第一天)
- 2013ACM-ICPC杭州赛区全国邀请赛——Random Walk
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
- getContentLength()为-1 解决方法
- linux网卡驱动分析之驱动加载
- mongodb备份
- Oracle 并行(Parallel)
- Smack XMPPConnection 的简单使用
- <java——多态、内部类>
- dsfljggk;h