设f(x)表示x转移到1需要的次数的期望,p(x)为不超过x的素数的个数,其中能整除x的有g(x)个

则有(1-g(x)/p(x))的概率下一步还是转移到x,剩下的情况各有1/p(x)的概率转移到x/y

根据全期望公式,f(x) = 1 + (1-g(x)/p(x)) * f(x) + sum{ 1/p(x) * f(x/y) | y是能整除x且不超过x的素数 }

代码是用记忆化搜索计算f的

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 using namespace std;
 5
 6 const int maxn = 1000000;
 7 bool vis[maxn + 10];
 8 int prime[100000], pcnt = 0;
 9
10 void prime_table()
11 {
12     int m = sqrt(maxn + 0.5);
13     for(int i = 2; i <= m; i++) if(!vis[i])
14         for(int j = i*i; j <= maxn; j += i) vis[j] = true;
15     for(int i = 2; i <= maxn; i++) if(!vis[i]) prime[pcnt++] = i;
16 }
17
18 double d[maxn + 10];
19
20 double dp(int x)
21 {
22     if(x == 1) return 0;
23     if(vis[x]) return d[x];
24     vis[x] = 1;
25     double& ans = d[x];
26     int p = 0, g = 0;
27     for(int i = 0; i < pcnt && prime[i] <= x; i++)
28     {
29         p++;
30         if(x % prime[i] == 0) { ans += dp(x / prime[i]); g++; }
31     }
32     ans = (ans + p) / g;
33     return ans;
34 }
35
36 int main()
37 {
38     //freopen("in.txt", "r", stdin);
39
40     prime_table();
41     memset(vis, false, sizeof(vis));
42     int T;
43     scanf("%d", &T);
44     for(int kase = 1; kase <= T; kase++)
45     {
46         int x;
47         scanf("%d", &x);
48         printf("Case %d: %.10f\n", kase, dp(x));
49     }
50
51     return 0;
52 }

代码君

转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/4330900.html

UVa 11762 (期望 DP) Race to 1相关推荐

  1. Uva 11600 期望DP

    题意:n个城市,相互可达(有n(n-1)/2条边),其中有一些道路上面有妖怪,现在,从1号城市出发,随机挑取一个城市走去,这个道路上的妖怪就会被消灭,求: 在平均情况下,需要走多少步,使得任意两个城市 ...

  2. luogu P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现) Weblin ...

  3. [SCOI2008]奖励关(期望dp)

    你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃). 宝 ...

  4. 【bzoj4318】OSU! 期望dp

    题目描述 osu 是一款群众喜闻乐见的休闲软件.  我们可以把osu的规则简化与改编成以下的样子:  一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的0 ...

  5. 【loj6342】跳一跳 期望dp

    题目描述 一个人从 $1$ 开始向 $n$ 跳,在 $i$ 时会等概率跳到 $i,i+1,...,n$ 之一.求从 $1$ 跳到 $n$ 的期望步数. $n\le 10^7$ . 题解 期望dp傻逼题 ...

  6. 【高斯消元】兼 【期望dp】例题

    [总览] 高斯消元基本思想是将方程式的系数和常数化为矩阵,通过将矩阵通过行变换成为阶梯状(三角形),然后从小往上逐一求解. 如:$3X_1 + 2X_2 + 1X_3 = 3$ $           ...

  7. Luogu P3251 [JLOI2012]时间流逝 期望dp

    题面 题面 题解 期望\(dp\)好题! 今年\(ZJOI\)有讲过这题... 首先因为\(T\)只有\(50\),大力\(dfs\)后发现,可能的状态数最多只有\(20w\)左右,所以我们就可以大力 ...

  8. 【bzoj5197】[CERC2017]Gambling Guide 期望dp+堆优化Dijkstra

    题目描述 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易时,你可以选择 ...

  9. 【BZOJ】1076 [SCOI2008]奖励关 期望DP+状压DP

    [题意]n种宝物,k关游戏,每关游戏给出一种宝物,可捡可不捡.每种宝物有一个价值(有负数).每个宝物有前提宝物列表,必须在前面的关卡取得列表宝物才能捡起这个宝物,求期望收益.k<=100,n&l ...

最新文章

  1. 泪目!兰大硕导的《致谢》火了:我从来不曾优秀过,也从来不曾放弃过!
  2. const变量的使用方法。。
  3. win10安装java+hadoop+spark
  4. 中职学校计算机教学中论文,中职学校计算机教学论文
  5. linux音量模块,Linux下的音量控制器alsamixer
  6. 【MATLAB统计分析与应用100】案例001:matlab使用Importdata函数导入文本txt数据
  7. 复习Linux基本操作----常见指令
  8. c语言定义字符数组数码管,数组数码管
  9. matlab hrv,利用ECG信号进行HRV分析
  10. Bailian2715 谁拿了最多奖学金【分段计算处理】(Vijos P1001)
  11. [渝粤教育] 西南科技大学 土木工程材料 在线考试复习资料
  12. RabbitMQ-C客户端使用说明
  13. PLC程序的组成结构
  14. BP神经网络预测模型
  15. 2008 r2彻底删除 server sql_sql2008完全卸载工具 彻底完全卸载SQL server2008
  16. mate7 android升级包下载,华为mate7 刷机包
  17. linux安装工具的过程
  18. MySQL下载安装与配置详细教程
  19. 堆排序(Heapsort)-全网最详细
  20. 字符串与Unicode编码相关转换

热门文章

  1. apache的es的原理_ElasticSearch原理
  2. mysql 5.5.安装包_完美!阿里内部MySQL笔记爆火,肝完不再删库到跑路!(文档+视频贼全!)...
  3. web_reverse_proxy -- haproxy
  4. java中垃圾收集_Java中的垃圾收集器是什么?
  5. golang中如何抓取panic让程序正常退出
  6. 卷积Strassen算法
  7. StackOverflow程序员推荐:每个程序员都应读的30本书
  8. 一道关于 json 和 slice 的题难倒了 80% 的人
  9. 记录 之 tensorflow常见的数据预处理操作
  10. C++构造函数之委托构造函数