题目链接:https://vjudge.net/problem/LightOJ-1038 1038 - Race to 1 Again    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Rimi learned a new thing about integers, which is - any positive integer greater than 1 can be divided b…
题目链接: Lightoj  1038 - Race to 1 Again 题目描述: 给出一个数D,每次可以选择数D的一个因子,用数D除上这个因子得到一个新的数D,为数D变为1的操作次数的期望为多少? 解题思路: 概率DP咯,对于只知道期望是:E(X) = X1*p(X1) + X2*p(X2) + …… + Xn*p(Xn)的窝,拿这个题目没有一点办法.然后看了讨论版,发现总会有一些神人存在. 求操作次数的期望时,先设定第i个因子给期望的贡献为Ti,那么有:E = (T1 + T2 + T3…
题目链接:http://lightoj.com/volume_showproblem.php?problem=1038 题意是:给你一个N (1 ≤ N ≤ 105) 每次N都随机选一个因子d,然后让N=N/d, 求N变成1的次数的期望: 当 N = 2 时 2有两个因子:1,2 E[2] = E[1]/2 + E[2]/2 + 1;因此可以求出E[2]; 当N = 8 时 8有4个因子1 2 4 8; E[8] = E[1]/4 + E[2]/4 + E[4]/4 + E[8]/4+ 1;因此…
https://vjudge.net/problem/LightOJ-1038 题意:给出一个数n,每次选择n的一个约数m,n=n/m,直到n=1,求次数的期望. 思路:d[i]表示将i这个数变成1的次数期望. 现在对于D来说,d[D]=1/cnt*{(d[D/1]+1)+(d[D/x1]+1)+(d[D/x2]+1)....+(D[D/D]+1)} 化简得 d[D]=1/(cnt-1)*(d[D/1]+d[D/x1]+...d[D/D]+cnt) #include<iostream> #in…
题目大意:给出一个数,要求你按一定的规则将这个数变成1 规则例如以下,如果该数为D,要求你在[1,D]之间选出D的因子.用D除上这个因子,然后继续按该规则运算.直到该数变成1 问变成1的期望步数是多少 解题思路:递推,设该数为D.有N个因子,各自是1,n1,n2,n3-nn-2,D, 那么选到每一个因子的概率都是1/N,除非选到D,不然选到其它因子的话都要多1步.然后再计算D除以该因子的期望 这就能得到公式了,设dp[D]为数D按规则变成1的期望步数 那么dp[D] = 1/N * (dp[D/…
题目:戳这里 题意:一个数字n不断迭代地除以自身的因子得到1.求这个过程中操作除法次数的期望. 解题思路: 求概率基本都是从一个最基础的状态开始延伸推出公式,得出答案.因为每个数都有个共同的最终状态1,所以我们从1向n推(注意用到期望的可加性,可加性不需要事件相互独立.可以推出期望公式:E=1/n * 1 + (n - 1)/n *(1 + E1 + ... + En)Ei表示D除以一个除数后值为Di时,Di的期望.(第一道自己ac的该类型题目,记录一下 附ac代码: 1 #include <b…
题意:给一个数,用这个数的因数除以这个数,直到为1时,求除的次数的期望. 设一个数的约数有M个,E[n] = (E[a[1]]+1)/M+(E[a[2]]+1)/M+...+(E[a[M]]+1)/M 一个数最大的约数是它自己. 则有,E[n] = (E[a[1]]+1)/M+(E[a[2]]+1)/M+...+(n+1)/M (M-1)*E[n]=E[a[1]]+E[a[2]]+...+E[a[M-1]]+M #include<stdio.h> #include<math.h>…
题意:给定一个数 n,然后每次除以他的一个因数,如果除到1则结束,问期望是多少. 析:概率DP,可以用记忆公搜索来做,dp[i] = 1/m*sum(dp[j] + 1) + 1/m * (dp[i] + 1)  ==> dp[i] = (sum(dp[j]) + m) / (m-1).其中m是因数个数. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #i…
Race to 1 Again LightOJ - 1038 题意:有一个数字D,每次把D变为它的一个因数(变到所有因数的概率相等,可能是本身),变到1后停止.求对于某个初始的D变到1的期望步数. x的因子有p[1],...,p[k] 那么ans[x]=1/k*(ans[p[1]]+1)+...+1/k*(ans[p[k]]+1)=1/k*(ans[p[1]]+...+ans[p[k-1]])+1/k*ans[p[k]]+1(k-1)/k*ans[x]=1/k*(ans[p[1]]+...+an…
设dp_i为所求答案,每次选择因数的概率相同,设i有x个因数,dp_i=sum(1/x*x_j)+1,(x_j表示第j个因数),那我们就预处理每个数的因数即可,T=10000,需要预处理出答案 #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) typedef long long LL; typedef pair<int,int> pii; ; vector<int>…