LightOJ 1038 Race to 1 Again【概率DP】
2016-10-03 16:53
579 查看
Race to 1 Again
Crawling in process...
Crawling failed
Time Limit:2000MS
Memory Limit:32768KB 64bit IO Format:%lld & %llu
Submit
Status
Practice
LightOJ 1038
uDebug
Appoint description:
System Crawler (Sep 30, 2016 11:41:55 AM)
Description
Input
Output
Sample Input
Sample Output
Hint
Description
Rimi learned a new thing about integers, which is - any positive integer greater than
1 can be divided by its divisors. So, he is now playing with this property. He selects a number
N. And he calls this D.
In each turn he randomly chooses a divisor of D (1 to D). Then he divides
D by the number to obtain new D. He repeats this procedure until
D becomes 1. What is the expected number of moves required for
N to become 1.
Input
Input starts with an integer T (≤ 10000), denoting the number of test cases.
Each case begins with an integer N (1 ≤ N ≤ 105).
Output
For each case of input you have to print the case number and the expected value. Errors less than
10-6 will be ignored.
Sample Input
3
1
2
50
Sample Output
Case 1: 0
Case 2: 2.00
Case 3: 3.0333333333
Crawling in process...
Crawling failed
Time Limit:2000MS
Memory Limit:32768KB 64bit IO Format:%lld & %llu
Submit
Status
Practice
LightOJ 1038
uDebug
Appoint description:
System Crawler (Sep 30, 2016 11:41:55 AM)
Description
Input
Output
Sample Input
Sample Output
Hint
Description
Rimi learned a new thing about integers, which is - any positive integer greater than
1 can be divided by its divisors. So, he is now playing with this property. He selects a number
N. And he calls this D.
In each turn he randomly chooses a divisor of D (1 to D). Then he divides
D by the number to obtain new D. He repeats this procedure until
D becomes 1. What is the expected number of moves required for
N to become 1.
Input
Input starts with an integer T (≤ 10000), denoting the number of test cases.
Each case begins with an integer N (1 ≤ N ≤ 105).
Output
For each case of input you have to print the case number and the expected value. Errors less than
10-6 will be ignored.
Sample Input
3
1
2
50
Sample Output
Case 1: 0
Case 2: 2.00
Case 3: 3.0333333333
/* 题意:求将一个数变成1,每次可以除去它的任意一个因子,问你次数的期望为多少 类型:概率DP 分析:设dp[i]表示i变成1的次数期望 当N=2时,有两个因子:1,2.所以dp[2]=dp[1]/2+dp[2]/2+1; 可以得到dp[2]=2; 当N=8时,有4个因子1,2,4,8.所以dp[8]=dp[1]/4+dp[2]/4+dp[4]/4+dp[8]/4+1;可以得到dp[8]; 以此类推 dp[i]=dp[a[1]]/cnt+dp[a[2]]/cnt+...+dp[a[cnt]]/cnt+1; 其中cnt为i的因子个数,a数组为i的因子集合 整理可得dp[i]=(dp[a[1]]+dp[a[2]]+...+dp[a[cnt-1]]+cnt)/(cnt-1); */ #include <cstring> #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <stack> #include <vector> #include <queue> using namespace std; const int maxn = 100005; double dp[maxn]; int main() { dp[1] = 0; for(int i=2;i<maxn;i++){ double sum=0; int cnt=0; for(int j=1;j*j<=i;j++){ if(i%j==0){ cnt++; sum+=dp[j]; if(j*j!=i){ cnt++; sum+=dp[i/j]; } } } sum+=cnt; dp[i]=sum/(cnt-1); } int t,n; scanf("%d",&t); for(int Cas=1;Cas<=t;Cas++){ scanf("%d",&n); printf("Case %d: %.6f\n",Cas,dp ); } return 0; }
相关文章推荐
- 【LightOJ 1038】Race to 1 Again(概率DP求期望)
- lightoj1038 - Race to 1 Again(概率DP)
- LightOJ-1038-Race to 1 Again(概率dp)
- LightOJ 1038 Race to 1 again 期望+概率dp
- LightOJ 1038 Race to 1 Again (概率DP,记忆化搜索)
- LightOJ1038---Race to 1 Again (概率dp(基础))
- LightOJ 1038-Race to 1 Again(概率dp)
- LightOJ 1038 Race to 1 Again(概率期望DP)
- LIghtOJ1038---Race to 1 Again(概率dp)
- lightoj 1038 - Race to 1 Again 【概率dp】
- 【概率DP】 LightOJ 1038 Race to 1 Again
- LightOJ 1038 - Race to 1 Again(期望DP)
- LightOJ 1038 - Race to 1 Again (期望dp)
- LightOJ 1038 - Race to 1 Again 【DP】
- Light OJ 1038 - Race to 1 Again(概率DP)
- light oj 1038 - Race to 1 Again(概率DP)
- LightOJ 1038 Race to 1 Again(概率dp+期望)
- Light oj 1038 - Race to 1 Again(概率dp)
- LightOJ 1038 Race to 1 Again(概率期望)
- light oj 1038 - Race to 1 Again(概率dp求期望 记忆化搜索)