2013ACM-ICPC杭州赛区全国邀请赛——Random Walk

题目链接

  • 题意:

    n个点,按照题中给的公式可以求出任意两个点转移的概率。求从1到n的期望转移次数

  • 分析:

    设dp[i]为从i到n的期望,那么可以得到公式dp[i] = sigma(dp[i + j] * p(i + j, i)),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],那么如果从下到上求,最后直接除以系数即可

    也算是一个概率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;
}

2013ACM-ICPC杭州赛区全国邀请赛——Random Walk,布布扣,bubuko.com

时间: 2024-10-06 16:11:47

2013ACM-ICPC杭州赛区全国邀请赛——Random Walk的相关文章

2013 ACM-ICPC长沙赛区全国邀请赛——Travel in time

题目链接 题意: 给n个点,m条边的无向图,一个起点和一个终点.每边都有消耗,经过就要付出代价:每个点有消耗和价值,只有消耗了才会获得价值,如果不消耗就不会获得价值,且下一次消耗的点的价值一定要严格大于之前消耗过的点的价值 求:起点到终点消耗不超过给定值T时的价值最大值 1 < N < 100,0 < M < 1000,0 < T <= 300 分析: 对于不进行点的消耗的操作,就是求两点的最短路,floyd求 表示一下状态: 可以粗率表示为:当前所在点.总消耗值.总价

2013 ACM-ICPC南京赛区全国邀请赛

题目链接:http://acm.hdu.edu.cn/search.php?field=problem&key=2013 ACM-ICPC南京赛区全国邀请赛--题目重现&source=1&searchmode=source A(HDU4586) Play the Dice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 1

HDU 4573 Throw the Stones(动态三维凸包)(2013 ACM-ICPC长沙赛区全国邀请赛)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4573 Problem Description Remember our childhood? A few naked children throw stones standing on the same position, the one throws farther win the game. Aha, of course, there are some naughty boys who care

hdu 4462 第37届ACM/ICPC 杭州赛区 J题

题意:有一块n*n的田,田上有一些点可以放置稻草人,再给出一些稻草人,每个稻草人有其覆盖的距离ri,距离为曼哈顿距离,求要覆盖到所有的格子最少需要放置几个稻草人 由于稻草人数量很少,所以状态压缩枚举,之后慢慢判断即可,注意放稻草人的格子是不需要覆盖的 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath>

hdu 4461 第37届ACM/ICPC杭州赛区I题

题意:给两个人一些棋子,每个棋子有其对应的power,若b没有或者c没有,或者二者都没有,那么他的total power就会减1,total power最少是1,求最后谁能赢 如果b或c出现的话,flag就标记为1,那么在判断的时候如果flag==0,就说明他们没出现过,那么就要-1,然后就wa了,必须要两个变量判断,不知道为什么 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #inclu

hdu 4463 第37届ACM/ICPC杭州赛区K题 最小生成树

题意:给坐标系上的一些点,其中有两个点已经连了一条边,求最小生成树的值 将已连接的两点权值置为0,这样一定能加入最小生成树里 最后的结果加上这两点的距离即为所求 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<map>

HDOJ 4579 Random Walk 解方程

Random Walk Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others) Total Submission(s): 200    Accepted Submission(s): 117 Problem Description Yuanfang is walking on a chain. The chain has n nodes numbered from 1 to n. Ev

加入商品分类信息,考虑用户所处阶段的 图模型 推荐算法 Rws(random walk with stage)

场景: 一个新妈妈给刚出生的宝宝买用品,随着宝宝的长大,不同的阶段需要不同的物品. 这个场景中涉及到考虑用户所处阶段,给用户推荐物品的问题. 如果使用用户协同过滤,则需要根据购买记录,找到与用户处于同一阶段的用户. 不加入分类信息,单纯使用物品信息,则可能因为买了不同牌子的尿布,而判断为非相似用户, 所以加入商品分类信息 算法步骤: 1.   加入分类信息 1)   根据时间将用户交易记录分成若干阶段(比如,近90天,近360天-近90天,...) 2)   对于中的记录(以中的为例),在向量的

HDU 4487 Maximum Random Walk 概率 dp

D - Maximum Random Walk Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 4487 Appoint description:  System Crawler  (2016-05-03) Description Consider the classic random walk: at each step, you ha