pid=4579" style="background-color:rgb(51,255,51)">题目链接

  • 题意:

    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;
}

最新文章

  1. FTP概述
  2. 冒泡排序-java
  3. RecyclerView使用总结
  4. 【0 - 1】OC内存管理
  5. c++ 递归斐波那契算法及时间复杂度
  6. vb调用exe文件
  7. (转)Xcode 中设置部分文件ARC支持
  8. linux 磁盘空间扩容 vg(+pv) lv(+空间) lv(缩减磁盘空间)
  9. lglob-lua 静态检查脚本
  10. JMX/RMI Nice ENGAGE &lt;= 6.5 Remote Command Execution
  11. 第三次作业-结对编程(wordcount)
  12. C#基础知识之Partial class
  13. python 项目启动路径自动添加
  14. web.xml中的ContextLoaderListener和DispatcherServlet区别
  15. css td hover 选择器无效
  16. Windows10 VS2017 C++ xml解析(tinyxml2库)
  17. Wampserver虚拟机配置记录
  18. HDU 1879 继续畅通工程(最小生成树)
  19. python生成随机数、随机字符串
  20. EZ 2018 03 09 NOIP2018 模拟赛(三)

热门文章

  1. Java学习(运算符,引用数据类型)
  2. python开发学习-day04(迭代器、生成器、装饰器、二分查找、正则)
  3. 【C#日期系列(三)】--C#获取某个月的第一个星期几的年月日
  4. 在内网环境使用WPAD/PAC和JS攻击win10
  5. 第一个ajax小demo
  6. Building Robust and Flexible Event System in Unity3D
  7. 无框架完整搭建安卓app及其服务端(一)
  8. 磁盘镜像分析工具TSK
  9. Proud Merchants HDU - 3466 (思路题--有排序的01背包)
  10. MySQL笔记(四)之内建函数