51nod1693 水群 最短路
若A=K*B,若仅通过操作二:将B变换为A需要K步,
由算数基本定理可知:k=p1*p2*……pn(p为素数,且可能重复)
那么:将B转化为p1*B需要p1步,将p1*B转化为p1*p2*B需要p2步,以此类推,将B转化为A需要(p1+p2+....pn)步
因为(p1*p2*p3...*pn) < (p1+p2+p3+...pn),故而若仅通过操作二将B转化为A至少需要(p1+p2+p3...+pn)步
因存在删除操作,我们将问题转化为图论:点i和点k*i之间存在单向边,点i和点i-1之间存在单项边。起始点为1,终点为n,求1到n的最短路。
我们知道:若仅通过操作二将1转化为较大的素数A,需要A步。但若通过操作三,我们可以先将1转化为(A+m),再通过(A+m)-A步操作,得到A。
例如:A=17,18=2*3*3,将1转化为18需要8步,再将18转化为17需要1步,共需要9步,远小于17。
因而我们可推断:较大的素数,可以通过操作三由较小的素数推出。
实际上,我们需要的素数仅为(2,3,5,7)
接下来,通过最短路算法,求解
#include<stdio.h>
#include<math.h>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#define MAXSIZE 1000005
#define INF 999999999
#define LL long long
using namespace std; int dist[MAXSIZE],p[]={,,,}; void spfa()
{
queue<int> Q;
Q.push();
for(int i=;i<MAXSIZE;i++)
dist[i] = INF;
dist[] = ;
while(!Q.empty())
{
int now = Q.front();
Q.pop();
for(int i=;i<;i++)
{
if(p[i]*now<MAXSIZE && dist[now*p[i]]>dist[now]+p[i])
{
dist[now*p[i]] = dist[now]+p[i];
Q.push(now*p[i]);
} if(now> && dist[now-]>dist[now]+)
{
dist[now-] = dist[now]+;
Q.push(now-);
}
}
}
} int main()
{
int n;
scanf("%d",&n);
spfa();
int ans = dist[n];
printf("%d\n",ans);
return ;
}
51nod1693 水群 最短路的更多相关文章
- 51nod1693 水群
题目链接:51nod1693 水群 题解参考大神的博客:http://www.cnblogs.com/fighting-to-the-end/p/5874763.html 这题时限0.4秒,真的够狠的 ...
- 51 nod 1693 水群
1693 水群 基准时间限制:0.4 秒 空间限制:524288 KB 分值: 160 难度:6级算法题 收藏 关注 总所周知,水群是一件很浪费时间的事,但是其实在水群这件事中,也可以找到一些有 ...
- 51nod 1693 水群
基准时间限制:0.4 秒 空间限制:524288 KB 分值: 160 难度:6级算法题 收藏 关注 总所周知,水群是一件很浪费时间的事,但是其实在水群这件事中,也可以找到一些有意思的东西. 比如 ...
- 51nod 1693 水群(神奇的最短路!)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1693 题意: 思路: 这个思路真是神了.. 对于每个点$i$,它需要和$ ...
- 胡小兔的OI日志3 完结版
胡小兔的 OI 日志 3 (2017.9.1 ~ 2017.10.11) 标签: 日记 查看最新 2017-09-02 51nod 1378 夹克老爷的愤怒 | 树形DP 夹克老爷逢三抽一之后,由于采 ...
- hdu3665 水最短路
题意 : 从起点0开始,到达最近的那个是海边的城镇的距离.. 思路: 水的最短路,随你怎么写,dij,floyd,spfa..都行,只要你喜欢..我写的spfa好久不写了,复 ...
- luoguP4366 [Code+#4]最短路 最短路
好久没写过博客了.... 本题还是挺有趣的(很水的最短路) 关键在于怎么优化这$n^2$条连边 通常,我们希望用一些边来替代一条边从而减小边集 那么,注意到异或操作可以拆分成按位运算,因此我们只需考虑 ...
- 【07】QQ群管理公告小结:
[07]QQ群管理公告小结: 01,请看公告遵守相关规定. 02,群内除QQ自带的缺省表情外(不是QQ的VIP或大图表情),禁止发送大表情,大图片(展示问题的屏幕截图除外), 03,修改群名片 ...
- JSOI 2017 Round 1滚粗记
day0 到常州一中报道,吃了午饭,好像这次有小火锅. 然后下午听JYY讲线性规划...好神啊. 晚上去试机,机子上没有npp,只有linux下的codeblocks,敲起来一顿一顿的...后来被迫使 ...
随机推荐
- 计算机基础:计算机网络-chapter2
因为计算机网络是的传输从物理到数据端的过程到端是自下而上的,所以大多数的教材都是从五层协议结构的底部开始向上延申. 物理层: = = 好复杂哦.看不懂,反正就是讲一些通信的线,信号传输的实现原理,和信 ...
- 枚举类 enum,结构体类 struct
1.枚举类型的值,直观易于理解,见词知意. 格式: enum 枚举类名:值类型 { 值1, 值2, 值n } 每个值默认(省略“:值类型”)以int型数据存储,从0开始. 使用格式:枚举类名 变量=枚 ...
- JS学习笔记Day4
一.什么是函数 将反复使用的功能代码,封装成一独立的模块,这个模块叫做函数 二.封装函数的好处 1.一次封装,多次使用 2.使程序可控 三.函数的分类:内置()函数和自定义函数 四.函数的数据类型(f ...
- (Dijkstra) POJ2387 Til the Cows Come Home
Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 81024 Accepted ...
- Go语言反射规则
Go语言反射规则 - The Laws of Reflection 转:http://my.oschina.net/qbit/blog/213720 原文地址:http://blog.golang.o ...
- 如何再window下统计自己写的代码行
git log --since="2018-05-01" --before="2018-11-5" --author="$(git config -- ...
- 2017-12-18python全栈9期第三天第二节之str常用操作方法及for循环之判断字母数字组成
#!/user/bin/python# -*- coding:utf-8 -*-name = 'zd123'print(name.isalnum()) #由数字或字母组成print(name.isal ...
- continue #结束本次循环进行下次循环
#!/user/bin/python# -*- coding:utf-8 -*-print(111)while True: print(222) print(333) continue #结束本次循环 ...
- 人工神经网络入门(4) —— AFORGE.NET简介
范例程序下载:http://files.cnblogs.com/gpcuster/ANN3.rar如果您有疑问,可以先参考 FAQ 如果您未找到满意的答案,可以在下面留言:) 0 目录人工神经网络入门 ...
- [leetcode-118]Pascal's triangle 杨辉三角
Pascal's triangle (1过) Given numRows, generate the first numRows of Pascal's triangle. For example, ...