【一本通】数字转换【树形DP】

该博客探讨了一个数字变换的问题,其中数字x可以变成其约数之和y,如果y小于x。目标是在不超过n的正整数范围内找到最长的变换序列,避免重复数字。博主提出使用树的最长路径思想,构建一个森林结构,并提供了优化的解决方案,通过求每个数的倍数来计算约数和。最终,通过标记搜索避免重复搜索,寻找每棵树中最长路径的最大值。
摘要由CSDN通过智能技术生成

Date:2022.03.29
题意描述:
如果一个数 x 的约数之和 y(不包括他本身)比他本身小,那么 x 可以变成 y,y 也可以变成 x。
例如,4 可以变为 3,1 可以变为 7。
限定所有数字变换在不超过 n 的正整数范围内进行,求不断进行数字变换且不出现重复数字的最多变换步数。
输入格式
输入一个正整数 n。
输出格式
输出不断进行数字变换且不出现重复数字的最多变换步数。
数据范围
1≤n≤50000
输入样例:
7
输出样例:
3
样例解释
一种方案为:4→3→1→7。

思路:总体思路同树的最长路径,我们注意到如果一个数约数和<这个数,则可在这两个数间连一条无向边。由此,最终我们能得到一个森林(注意不一定只有一棵树!!!),因此答案即找森林中每棵树的最长路径再取个最大值,边权都为1。
关于求一个数的约数和,当然可以试除法筛, O ( N N ) O(N\sqrt{N}) O(NN )能过。但我们可以逆向思维,这样如果 N N N更大更容易拓展,我们要求一个数的约数和,那我们不妨求每个数的倍数,每次让这个数的倍数加上这个数,最终每个数都会得到它的约数和。
此外,特别注意 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值