题解:

首先将问题转化,可以发现操作改为两种

一种是s*=k,代价为k,一种是s--,代价为1

转化成图论,spfa跑最短路

然后更据一些证明,代价1的k<=13且为质数,并且不可能操作2连续5次

所以就可以优化

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=,M=;
int n,a[N],b[M],f[N],in[N],dis[N];
int main()
{
scanf("%d",&n);
f[]=;
f[]=,f[]=,f[]=,f[]=,f[]=,f[]=;
int l=,r=;
memset(dis,0x3f,sizeof dis);
dis[]=;
b[]=;
while (l!=r)
{
int now=b[l++];
in[now]=;
l%=M;
if (now!=&&dis[now-]>dis[now]+)
{
dis[now-]=dis[now]+;
if (!in[now-])
{
b[r++]=now-;
in[now-]=;
r%=M;
}
}
for (int i=;f[i]*now<=n+&&i<=f[];i++)
{
int k=f[i]*now;
if (dis[k]>dis[now]+f[i])
{
dis[k]=dis[now]+f[i];
if (!in[k])
{
b[r++]=k;
in[k]=;
r%=M;
}
}
}
}
printf("%d",dis[n]);
}

51nod1693的更多相关文章

  1. 51nod1693 水群

    题目链接:51nod1693 水群 题解参考大神的博客:http://www.cnblogs.com/fighting-to-the-end/p/5874763.html 这题时限0.4秒,真的够狠的 ...

  2. 51nod1693 水群 最短路

    若A=K*B,若仅通过操作二:将B变换为A需要K步, 由算数基本定理可知:k=p1*p2*……pn(p为素数,且可能重复) 那么:将B转化为p1*B需要p1步,将p1*B转化为p1*p2*B需要p2步 ...

随机推荐

  1. Win32建立右键弹出菜单(PopMenu)

    自定义右键菜单: #ifndef _CONTEXTMENU_H_ #define _CONTEXTMENU_H_ #include <windows.h> //动态菜单 #define I ...

  2. swift设计模式学习 - 策略模式

    移动端访问不佳,请访问我的个人博客 设计模式学习的demo地址,欢迎大家学习交流 策略模式 策略模式定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. ...

  3. 51nod 1137 矩阵乘法

    基本的矩阵乘法 中间for(int j=0;i<n;i++)  //这里写错了   应该是j<n 晚上果然  效率不行 等会早点儿睡 //矩阵乘法 就是 两个矩阵 第一个矩阵的列 等与 第 ...

  4. ios苹果机系统的1px显示解决方案

    1px边框在iPhone高清屏下,其实会变成2个物理像素的边框. /* 解决一像素问题 */ .navigation:before{ content: ""; pointer-ev ...

  5. The way to Go(6): Go程序的基本结构和要素

    Reference: Github: Go Github: The way to Go Go程序的基本结构和要素 helloworld.go: package main import "fm ...

  6. NS3 MyApp Class Reference

    官方文档:MyApp 可以在下面的几个例子找到: examples/tutorial/fifth.cc examples/tutorial/seventh.cc examples/tutorial/s ...

  7. HDU 5876 Sparse Graph(补图中求最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=5876 题意: 在补图中求s到其余各个点的最短路. 思路:因为这道题目每条边的距离都是1,所以可以直接用bfs来做 ...

  8. Java I/O学习 标准的I/O重定向

    public class Test{ /* * 标准的I/O重定向 * System.setIn(InputStream) * System.setOut(PrintStream) * System. ...

  9. python 斐波那契查找

    def fibonacci_search(lis, key): # F = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987 ...

  10. java基础学习总结——线程(一)

    一.线程的基本概念