期望概率dp lightoj 1038 Race to 1 Again

原创 2015年11月17日 16:54:33

从考虑第一步开始

p(x):代表从x到1的期望

n的所有因子为n,a1,a2....,1(可以打表求出),总个数为size, x = size - 2;

p(n) = (p(a1)+1+p(a2)+1+.....+p(ax)+1)*(1/size) + 1/size + (p(n)+1)*(1/size);

化简式子得到:

p(a1)+p(a2)+,,,+p(ax) = s;

p(n) = (s + size)/(size-1);

利用打表得到的size,少了1所以+1

/********************************************
Author         :Crystal
Created Time   :
File Name      :
********************************************/
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <climits>
#include <string>
#include <vector>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
#include <cctype>
using namespace std;
typedef long long ll;
typedef pair<int ,int> pii;
#define MEM(a,b) memset(a,b,sizeof a)
#define CLR(a) memset(a,0,sizeof a);
const int inf = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
//#define LOCAL
double dp[200006];
std::vector<int> v[100005];
void init(){
	for(int i=2;i<=100001;i++){
		for(int j=i;j<=100001;j+=i){
			v[j].push_back(i);
		}
	}
	dp[1] = 0;
	for(int i=2;i<=100001;i++){
		double s = 0;
		for(int j=0;j<v[i].size();j++){
			s += dp[i/v[i][j]];
		}
		dp[i] = (s+1)/v[i].size()+1;
		//递推公式,
	}
}
int main()
{
#ifdef LOCAL
	freopen("in.txt", "r", stdin);
//	freopen("out.txt","w",stdout);
#endif
	init();
	int t;cin >>  t;
	int kase = 1;
	while(t--){
		int n;cin >>n;
		printf("Case %d: %.10lf\n",kase++,dp[n]);

	}
	return 0;
}









[期望dp+记忆化搜索] light oj 1038 Race to 1 Again

题意: 给一个数n,每次随机选它的一个约数去除n,直到除到1为止,问除的次数的期望。 思路: E[n]= E[n/a[1]]/cnt+E[n/a[2]]/cnt+...+E[n/a[n]]/cn...
  • wdcjdtc
  • wdcjdtc
  • 2015年04月29日 11:01
  • 667

LightOJ 1038 Race to 1 Again

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25915 题意:给一个数n,每次等概率选择它的一个因子p,...
  • chy20142109
  • chy20142109
  • 2016年06月27日 14:31
  • 156

lightoj1038 - Race to 1 Again(概率DP)

题意 : 一开始给你一个数D然后随机从它的因子中找出一个x,进行D = D / x操作, 这样算一步,直到D=1结束,问你P(D)的期望是几步。 思路 : 建边之后就是典型的概率DP题,状态转移方程...
  • u010619381
  • u010619381
  • 2013年11月19日 16:26
  • 729

Race to 1 Again (概率DP)

题目链接:https://cn.vjudge.net/contest/208908#problem/C 题目大意:给你一个数,每次选择一个他的一个因子并除以该因子,得到一个新的数,然后重复该操作 ...
  • haut_ykc
  • haut_ykc
  • 2018年01月24日 18:38
  • 35

lightoj 1038 Race to 1 Again

题意: 给出一个数字D 我们可以选择1-D中可以被D整除的数字,然后用D出得到一个新的数字D1; 然后在找所有D1的因子,用D1除,直到得到1; 问除的次数的期望值; 思路: d[i] 代...
  • u014552756
  • u014552756
  • 2016年05月20日 09:53
  • 193

LightOJ1038-Race to 1 Again

#include #include #include #include #include #define M 1100000 using namespace std; double dp[1...
  • u012881610
  • u012881610
  • 2015年07月21日 00:17
  • 322

Light oj 1038 - Race to 1 Again(概率dp)

1038 - Race to 1 Again PDF (English) Statistics Forum Time Limit: 2 se...
  • u014737310
  • u014737310
  • 2015年10月02日 15:32
  • 277

动态规划晋级——Race to 1 Again【概率DP】

转载请注明出处:http://blog.csdn.net/a1dark 分析: 题意:给一个数,用这个数的约数(包括自己)去除这个数,直到得数为1,求除的次数的期望。 思路:设一个数...
  • verticallimit
  • verticallimit
  • 2013年10月12日 13:54
  • 1199

lightoj 1038 - Race to 1 Again

这是一道用动态规划求数学期望的题目。 题目的意思是说任何一个大于1的整数,, 经过若干次除以自己的因子之后可以变为1, 求该变换字数的数学期望值。 例如 16 数以自己的因子之后可以变为1 2 4 8...
  • u011433745
  • u011433745
  • 2013年08月21日 13:01
  • 1214

LIghtOJ 1038 Race to 1 Again

如果只是找n的所有因子,而不需要判断因子是不是素数,应该会快一些。
  • nameofcsdn
  • nameofcsdn
  • 2016年08月04日 15:23
  • 1084
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:期望概率dp lightoj 1038 Race to 1 Again
举报原因:
原因补充:

(最多只允许输入30个字)