题目描述

如果一个数 x 的约数和 y (不包括他本身)比他本身小,那么 x 可以变成 y,y 也可以变成 x。例如 4 可以变为 3,1 可以变为 7。限定所有数字变换在不超过 n 的正整数范围内进行,求不断进行数字变换且不出现重复数字的最多变换步数。

输入格式

输入一个正整数 n。

输出格式

输出不断进行数字变换且不出现重复数字的最多变换步数。

样例

样例输入

7

样例输出

3

样例说明

一种方案为 4→3→1→7。

数据范围与提示

对于 100% 的数据,1≤n≤50000。

******求树的最长链问题,先预处理每个数的约数,将可以互相转化的数之间连边,很明显这是一颗树,我们要求树的最长路径。

 #include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int sum[] = {},n,d1[],d2[];
void ready()
{
int i,j;
scanf("%d",&n);
for(i = ;i <= n;i++)
{
for(j = ;j <= n / i;j++)
{
if(i * j > n)
break;
sum[i * j] += i;
}
}
}
void dp()
{
int i;
for(i = n;i >= ;i--) //因为大数字一定是小数字的后代
{
if(sum[i] < i) //sum[i]是i的父亲节点
{
if(d1[i] + > d1[sum[i]])//修改sum[i]这点的最大值
{
d2[sum[i]] = d1[sum[i]];
d1[sum[i]] = d1[i] + ;
}
else if(d1[i] + >d2[sum[i]])
{
d2[sum[i]] = d1[i] + ;
}
}
}
}
int main()
{
int i,ans = ;
ready();
dp();
for(i = ;i <= n;i++) //遍历所有的节点,找最大值+次大值的最大值
{
if(d1[i] + d2[i] > ans)
ans = d1[i] + d2[i];
}
printf("%d",ans);
return ;
}

LOJ10155数字转换的更多相关文章

  1. $Loj10155$ 数字转换(求树的最长链) 树形$DP$

    loj Description 如果一个数x的/约数和/y(不包括他本身)比他本身小,那么x可以变成y,y 也可以变成x.限定所有数字变换在不超过n的正整数范围内进行,求不断进行数字变换且不出现重复数 ...

  2. 在 shell 脚本获取 ip、数字转换等网络操作

    在 shell 脚本获取 ip.数字转换等网络操作 ip 和数字的相互转换 ip转换为数字 :: function ip2num() { local ip=$1 local a=$(echo $ip ...

  3. numtoyminterval函数——数字转换函数

      numtoyminterval函数——数字转换函数 ----转至51CTO 水滴的博客  语法:NUMTOYMINTERVAL ( n , 'char_expr' )              c ...

  4. 比较java与c语言中数字转换成字符的不同

    java java中将数字转换成字符非常方便,只要用一个"+"然后在跟一个空格行了.比如,你输入一个122 ,就会变成"122 ". import java.u ...

  5. ORACLE数字转换人民币大写

    ORACLE 数字转换人民币大写     示例.   数字                    :183066999230.68 人民币大写        :壹仟捌佰参拾亿陆仟陆佰玖拾玖万玖仟贰佰参 ...

  6. Duanxx的C++学习 : 数字转换String

    下面是这两个数字转换String道路.件:sstream string num2str1(unsigned int num) { stringstream ss; ss<<num; ret ...

  7. 算法--java实现将数字转换成人民币大写(迅雷面试题)

    今天去迅雷面试,是个数字转换成人民币的算法题: public class Rmb { /** * 人民币的基本信息和操作 * * @author soyoungboy * @version 1.0 * ...

  8. js字符串转换成数字与数字转换成字符串的实现方法

    转载:点击查看地址 js字符串转换成数字 将字符串转换成数字,得用到parseInt函数.parseInt(string) : 函数从string的开始解析,返回一个整数. 举例:parseInt(' ...

  9. java算法:统计数字-将数字转换成字符串,然后使用字符串String.valueOf()方法进行判断

    题目: 计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值. 样例 样例 1: 输入: k = 1, n = 1 输出: 1 解释: 在 [0, 1] 中,我们发现 1 出现了 ...

随机推荐

  1. 001-CPU多级缓存架构

    一.基本概念 大致关系: CPU Cache --> 前端总线 FSB (下图中的Bus) --> Memory 内存 CPU 为了更快的执行代码.于是当从内存中读取数据时,并不是只读自己 ...

  2. 对Java代码加密的两种方式,防止反编译

    使用Virbox Protector对Java项目加密有两种方式,一种是对War包加密,一种是对Jar包加密.Virbox Protector支持这两种文件格式加密,可以加密用于解析class文件的j ...

  3. python框架之Django(12)-认证系统之auth模块

    我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的终极框 ...

  4. Python3使用AES加密的库函数PyCrypto、PyCryptodome

    我们在网上查看Python爬虫教程的时候,细心的朋友会发现:很多网站为了降低服务器的请求压力都做了各式各样的反爬策略,浏览器通过http post请求服务器端数据时,传输的data字段很多都是经过加密 ...

  5. Network In Network学习笔记

    Network In Network学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/50458190 作者:hjimce 一.相关理论 本篇 ...

  6. javascript DOM 常用方法

    前端HTML+CSS+JS流程导图:https://www.processon.com/view/link/5ad1c2d0e4b0b74a6dd64f3c HTML+CSS+Javascript+j ...

  7. GoldenGate for Java adapter介绍二(代码篇)

    本示例主要介绍通过实现OGG的接口函数,实现自定义处理增量数据,将数据实时写入到mariadb (OGG官方不支持此数据库,所以只能采用自定义方式实现).以下是本次示例的4个类: Connection ...

  8. 外网访问ARM嵌入式Linux系统

    外网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从外网也能访问ARM嵌入式Linux系统? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并 ...

  9. python 猜数字游戏

    import random print('==============学无止境==========') secret=random.randint(1,10) print('sec:',secret) ...

  10. java static语句的总结

    static 是静态方法,他的引用不需要对象,可以使用类名直接进行引用,当然也不需要this.      由于不需要对象,所以static方法内无法调用非static的方法或对象   至于为什么mai ...