zoukankan      html  css  js  c++  java
  • 2013ACM-ICPC杭州赛区全国邀请赛——Random Walk

    题目链接

    • 题意:
      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
    ", b[1] / p[1][m]);
    	}
    	return 0;
    }


  • 相关阅读:
    I4-6 Sports and Extreme Sports Teacher:Lamb
    English trip V2-B 24 Biographies Teacher: TAALAN
    git设置下载代理 http or socket5 设置方法
    The "Go" Learning Trip -- 0. Base build
    English trip V2-B 23 Making a Good Impression Teacher: GABRIELE
    English trip V2-B 22 Tell a Story Teacher: Russell
    English trip V2-B 21 Personal History Teacher: Russell
    English trip EM2- PE 5A COMMUNICATION 交流 Teacher:Corrine
    Phonics 自然拼读法 ou ow oi oy au aw oo oo ea Teacher:Lamb
    beta分布 java代码
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/6748575.html
Copyright © 2011-2022 走看看