LightOJ1038---Race to 1 Again (概率dp(基础))
来源:互联网 发布:chart.js zoom y axis 编辑:程序博客网 时间:2024/06/05 22:40
【题目来源】:https://cn.vjudge.net/problem/LightOJ-1038
【题意】
给出一个数大于1的N,每次除以任意的一个他的因子,直到变为1,问从N除到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/1] + 1) + 1 / N * (dp[D/n1] + 1) + 1/ N * (dp[D/n2] + 1) + … + 1/N * (dp[D/nn-2] + 1) + 1/N * (dp[D / D] + 1)
化简得 dp[D] = 1 / (N-1) * (dp[D/n1] + dp[D/n2] + … + dp[D/nn-2] + N)。
还有,cout输出的double精度和printf输出的精度有区别。
参考:http://blog.csdn.net/l123012013048/article/details/46361365
#include<bits/stdc++.h>using namespace std;double dp[100000+10];int main(){ dp[1]=0; dp[2]=2; for(int i=3;i<=100000;i++) { dp[i]=0; int num=0; for(int j=1;j*j<=i;j++) { if(i%j==0) { num++; dp[i]+=dp[j]; if(i/j!=j) { num++; dp[i]+=dp[i/j]; } } } dp[i]=(dp[i]+num)/(num-1); } int T,cases=1; cin>>T; while(T--) { int n; cin>>n; printf("Case %d: %lf\n",cases++,dp[n]); }}
阅读全文
0 0
- LightOJ1038---Race to 1 Again (概率dp(基础))
- lightoj1038 - Race to 1 Again(概率DP)
- LIghtOJ1038---Race to 1 Again(概率dp)
- lightoj1038 - Race to 1 Again(期望DP)
- LightOJ1038-Race to 1 Again
- LightOJ1038-Race to 1 Again
- Light oj 1038 Race to 1 Again(概率dp)
- LightOJ-1038-Race to 1 Again(概率dp)
- LightOJ1038(概率DP)
- light oj 1038 - Race to 1 Again(概率dp求期望 记忆化搜索)
- 【LightOJ 1038】Race to 1 Again(概率DP求期望)
- LightOJ 1038 Race to 1 Again(概率期望)
- Race to 1 Again [概率]
- 【概率DP】 LightOJ 1038 Race to 1 Again
- Light oj 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
- unity3d(一)
- 欢迎使用CSDN-markdown编辑器
- 项目完成后完成版本更改,调试
- 通用性的图遍历函数
- A Short introduction to descriptors,附带SIFT描述子的基本原理
- LightOJ1038---Race to 1 Again (概率dp(基础))
- spring data 接口之 JpaRepository,JpaSpecificationExecutor
- VC控制台内存泄露检查机制
- 微信小程序(false问题)
- Android 6.0 Phone"通话显示"查询流程
- Swift storyBoard 判断 segue 目标
- 用两个栈实现队列(java版)
- ADRC--笔记
- 如何将MyBatis或者iBatis的SQL打印到控制台?