题意

给出一个整数 $N$,每次可以在不超过 $N$ 的素数中等概率随机选择一个 $P$,如果 $P$ 是 $N$ 的约数,则把 $N$ 变成 $N/P$,否则 $N$ 不变。问平均情况下需要多少次随机选择,才能把 $N$ 变成1呢?

分析

本题可以画出一个状态转移图,

例如 $n=6$ 时,

$n$ 的每个约数都对应一个状态,每个状态转移都有一定概率,从每个状态出发转移的概率和为1.

设 $f(i)$ 表示当前的数为 $i$ 时接下来需要选择的期望次数,可列出方程:

$$f(6) = 1 + f(6)/3 + f(3)/3 + f(2)/3$$

一般地,设不超过 $x$ 的素数有 $p(x)$ 个,其中有 $g(x)$ 个是 $x$ 的因子,则

$$f(x) = 1 + f(x) \times [1 - \frac{g(x)}{p(x)}] + \sum_{x | y} \frac{f(x/y)}{p(x)}$$

$$f(x) = \frac{\sum _{x|y}f(x/y) + p(x)}{g(x)}$$

边界为 $f(1)=0$,因为 $x/y < x$(即形成的是有向无环图),可以用记忆化搜索的方式 计算 $f(x)$,否则就要用高斯消元了。

#include<bits/stdc++.h>
using namespace std; //返回n以内素数的个数
//埃氏筛法O(nloglogn)
const int maxn = + ;
int prime[maxn]; //prime[i]表示第i个素数
bool is_prime[maxn + ]; //is_prime[i]为true表示i是素数
int prime_cnt; int sieve(int n)
{
int cnt = ;
for (int i = ; i <= n; i++) is_prime[i] = true;
is_prime[] = is_prime[] = false;
for (long long i = ; i <= n; i++)
{
if (is_prime[i])
{
prime[cnt++] = i;
for (long long j = i * i; j <= n; j += i) is_prime[j] = false; //i * i可能爆int
}
}
return cnt;
} bool vis[maxn];
double f[maxn];
double dp(int x)
{
//printf("x: %d\n", x);
if(vis[x]) return f[x];
if(x == ) return 0.0;
vis[x] = ;
double& ans = f[x];
int g = , p = ; //累加g[x] 和 p[x]
ans = ;
for(int i = ;i <prime_cnt && prime[i] <= x; i++)
{
p++;
if(x % prime[i] == )
{
g++;
ans += dp(x / prime[i]);
}
}
ans = (ans + p) / g;
return ans;
} int n; int main()
{
prime_cnt = sieve(); int T, kase = ;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
printf("Case %d: %.8f\n", ++kase, dp(n));
}
return ;
}

Uva11762 Race to 1——有向无环图&&记忆化搜索的更多相关文章

  1. 有向无环图的应用—AOV网 和 拓扑排序

    有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...

  2. JavaScript + SVG实现Web前端WorkFlow工作流DAG有向无环图

    一.效果图展示及说明 (图一) (图二) 附注说明: 1. 图例都是DAG有向无环图的展现效果.两张图的区别为第二张图包含了多个分段关系.放置展示图片效果主要是为了说明该例子支持多段关系的展现(当前也 ...

  3. 湖南省第十二届大学生计算机程序设计竞赛 B 有向无环图 拓扑DP

    1804: 有向无环图 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 187  Solved: 80[Submit][Status][Web Board ...

  4. javascript实现有向无环图中任意两点最短路径的dijistra算法

    有向无环图 一个无环的有向图称做有向无环图(directed acycline praph).简称DAG 图.DAG 图是一类较有向树更一般的特殊有向图, dijistra算法 摘自 http://w ...

  5. select 函数实现 三种拓扑结构 n个客户端的异步通信 (完全图+线性链表+无环图)

    一.这里只介绍简单的三个客户端异步通信(完全图拓扑结构) //建立管道 mkfifo open顺序: cl1 读 , cl2 cl3 向 cl1写 cl2 读 , cl1 cl3 向 cl2写 cl3 ...

  6. 【拓扑】【宽搜】CSU 1084 有向无环图 (2016湖南省第十二届大学生计算机程序设计竞赛)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1804 题目大意: 一个有向无环图(DAG),有N个点M条有向边(N,M<=105 ...

  7. 算法精解:DAG有向无环图

    DAG是公认的下一代区块链的标志.本文从算法基础去研究分析DAG算法,以及它是如何运用到区块链中,解决了当前区块链的哪些问题. 关键字:DAG,有向无环图,算法,背包,深度优先搜索,栈,BlockCh ...

  8. c/c++ 有向无环图 directed acycline graph

    c/c++ 有向无环图 directed acycline graph 概念: 图中点与点之间的线是有方向的,图中不存在环.用邻接表的方式,实现的图. 名词: 顶点的入度:到这个顶点的线的数量. 顶点 ...

  9. 第十二届湖南省赛 (B - 有向无环图 )(拓扑排序+思维)好题

    Bobo 有一个 n 个点,m 条边的有向无环图(即对于任意点 v,不存在从点 v 开始.点 v 结束的路径). 为了方便,点用 1,2,…,n 编号. 设 count(x,y) 表示点 x 到点 y ...

随机推荐

  1. SQL Server 2000~2017补丁包

    最新更新 Product Version Latest Service Pack Latest GDR Update Latest Cumulative Update CU Release Date ...

  2. [转帖]SSD和内存数据库技术

    SSD和内存数据库技术 自己的理解还是不是很对 SSD 提升的是 随机读 并没有对顺序写有多大的提升, 因为数据库采用的是redo的模式. 理论上写入 时是顺序写 所以 写并发的提升不会很大 但是会很 ...

  3. 【数据结构】11.java源码关于TreeMap

    目录 1.TreehMap的内部结构 2.TreehMap构造函数 3.元素新增策略 4.元素删除 5.元素修改和查找 6.特殊操作 7.扩容 8.总结 1.TreeMap的内部结构 首先确认一点,t ...

  4. pyspider 数据存入Mysql--Python3

    一.不写入Mysql 以爬取哪儿网为例. 以下为脚本: from pyspider.libs.base_handler import * class Handler(BaseHandler): cra ...

  5. python ---升级所有安装过的package

    # -*- coding:utf8 -*- import pip from subprocess import call from pip._internal.utils.misc import ge ...

  6. gin-swagger生成API文档

    github地址:https://github.com/swaggo/gin-swagger 下载安装cmd/swag命令工具包 先下载cmd包,才能执行相关命令 go get -u github.c ...

  7. Macvlan 和 IPvlan

    介绍 macvlan 本身是 linxu kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置自己的 IP.macv ...

  8. 获取当前URL地址和$_GET获取参数

    用这个方法,可以在不使用$_get[]就可以获取get传过来的参数.还可以获取当前的URL public function getCurrentUrl() { $pageURL = 'http'; i ...

  9. 《Spring in Action 4》阅读札记

    重要思路 Spring通过面向POJO编程.依赖注入.AOP和模板技术来降低Java开发的复杂性. 依赖注入能够让互相协作的软件组件保持松耦合,模块直接的耦合性是必要的,否则没法完成工作,但是耦合性需 ...

  10. 阿里云搭建git服务器

    阿里云服务器环境: CentOS7.0 jdk1.8.0 jre1.8.0 RAM:1G SWAP:3G MEM:40G apache-tomcat 8.0 1.下载gitlab-ce 11.0 到本 ...