给定数字n,m(1<=n,m<=500000)

将n变为n*2花费2,将n变为n-3花费3,要求过程中所有数字都在[1,500000]区间内。

求将n变为m的最少花费

思路:建图

将每个数字视为图中的点,数字之间的转换视为图中的边,有向图。

500000个点,(i,i*2)权值为2,(i,i-3)权值为3

转换为求n至m的最短路径

 #include <bits/stdc++.h>
using namespace std;
const long long INF = 0x3f3f3f3f3f3f3f3f;
int n,m;
vector<pair<long long,int>> edge[];
long long dis[];
typedef pair<long long,int> P;//first 最短距离,second顶点编号 void dijkstra(int s)
{
memset(dis,INF, sizeof(dis));
priority_queue<P,vector<P>,greater<P>> que; //最小堆
que.push(P(,s));
dis[s]=;
while(que.size())
{
P p=que.top();que.pop();
int v = p.second;
//vis[v]=1;
if(dis[v]<p.first)continue;
for(int i=;i<edge[v].size();i++)
{
int to = edge[v][i].second;
long long cost = edge[v][i].first;
//if(!vis[to]&&dis[to]>dis[v]+cost)
if(dis[to]>dis[v]+cost)
{
dis[to]=dis[v]+cost;
que.push(P(dis[to],to));
}
}
}
if(dis[m]==INF)
cout<<-<<endl;
else
cout<<dis[m];
} int main() {
cin >> n >> m;
for (int i = ; i <= ; i++)
{
if(*i<)
edge[i].push_back(make_pair(,*i));
if(i->)
edge[i].push_back(make_pair(,i-));
}
dijkstra(n);
return ;
}

思路2:暴力BFS

 #include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
typedef long long LL;
int n,m;
struct node
{
int x;
LL cost;
};
int vis[]; int main() {
cin >> n >> m;
node cur,now;
cur.x=n,cur.cost=;
queue<node> q;
q.push(cur);
LL ans=1e18;
vis[cur.x]=;
while(q.size())
{
now=q.front();q.pop();
if(now.x==m)
{
ans=min(ans,now.cost);
continue;//剪枝
}
cur.x=now.x*;
cur.cost=now.cost+;
if(cur.x<=&&!vis[cur.x])
{
vis[cur.x]=;
q.push(cur);
}
cur.x=now.x-;
cur.cost=now.cost+;
if(cur.x>&&!vis[cur.x])
{
vis[cur.x]=;
q.push(cur);
}
}
if(ans==1e18) printf("-1\n");
else cout<<ans<<endl;
return ;
}

CDOJ 1964 命运石之门【最短路径Dijkstra/BFS】的更多相关文章

  1. UESTC-1964命运石之门(类似SPFA的BFS)

    命运石之门 Time Limit: 1000 MS     Memory Limit: 256 MB Submit Status "这一切都是命运石之门的选择!" 凶真博士发明了能 ...

  2. 理解最短路径-Dijkstra算法

    最短路径—Dijkstra算法和Floyd算法 透彻理解迪杰斯特拉算法 Dijkstra算法的使用条件:图中不存在负权边. ---------------------------有待验证------- ...

  3. 最短路径问题,BFS,408方向,思路与实现分析

    最短路径问题,BFS,408方向,思路与实现分析 继上回挖下的坑,不知道大家有没有认真看最小生成树呢?很简单,这回也讲讲正常难度的,看不懂就来这里看看,讲的很好~~ 最短路径问题 说起这个问题,先说个 ...

  4. 最短路径 dijkstra

    最短路径 dijkstra #include <stdio.h> #include <string.h> #include <limits.h> #define M ...

  5. 网络最短路径Dijkstra算法

    最近在学习算法,看到有人写过的这样一个算法,我决定摘抄过来作为我的学习笔记: <span style="font-size:18px;">/* * File: shor ...

  6. c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法

    c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法 图的最短路径的概念: 一位旅客要从城市A到城市B,他希望选择一条途中中转次数最少的路线.假设途中每一站都需要换车,则这个问题反映到图上就是 ...

  7. 单源最短路径Dijkstra算法,多源最短路径Floyd算法

    1.单源最短路径 (1)无权图的单源最短路径 /*无权单源最短路径*/ void UnWeighted(LGraph Graph, Vertex S) { std::queue<Vertex&g ...

  8. 最短路径——Dijkstra算法和Floyd算法

    Dijkstra算法概述 Dijkstra算法是由荷兰计算机科学家狄克斯特拉(Dijkstra)于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图(无 ...

  9. 最短路径-Dijkstra算法与Floyd算法

    一.最短路径 ①在非网图中,最短路径是指两顶点之间经历的边数最少的路径. AE:1    ADE:2   ADCE:3   ABCE:3 ②在网图中,最短路径是指两顶点之间经历的边上权值之和最短的路径 ...

随机推荐

  1. python3+selenium框架设计04-封装测试基类

    在完成了日志类封装之后,那我们就要对测试基类进行实现,在其中对一些请求再次封装,在项目下新建一个framework文件夹,在文件夹下新建Base_Page.py文件,这是用来写测试基类的文件.在项目下 ...

  2. Html input 常见问题

    1.input回车事件不执行导致页面刷新 场景:在文本框中输入关键字按回车,页面自动刷新了 <form name="keywordForm" method="pos ...

  3. jquery iCheck的全选和获取value

    jQuery iCheck 插件提供高度可定制的复选框和单选按钮(jQuery和Zepto).最新版本1.0.2,有个最新的2.0预览版,但是发布之后没有再更新. 特点:在不同的浏览器和设备(桌面和移 ...

  4. svn服务器镜像备份

    server master  192.168.0.100-->源版本库 server slave     192.168.0.101-->镜像版本库 1.初始化svnsync init s ...

  5. Spring学习(十八)Bean 的三种依赖注入方式介绍

    依赖注入:让调用类对某一接口实现类的依赖关系由第三方注入,以移除调用类对某一接口实现类的依赖.接下来将详细的向大家介绍Spring容器支持的三种依赖注入的方式以及具体配置方法:•    属性注入方法• ...

  6. 如何查看当前应用包名和activity

    这里提供一个简单的方法来获取package和activity: 在Android模拟器上打开微信APP,然后打开CMD,输入以下命令: adb shell 接下来在#后面继续输入以下命令: logca ...

  7. Jquyer轮播带数字和提示文字

    效果图如下: 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...

  8. jenkins 安装网址

    https://wiki.jenkins.io/display/JENKINS/Installing+Jenkins

  9. chkconfig: command not found

    问题描述 Ubuntu 16.04 下安装 Nginx 服务器,在添加 nginx 服务时出现如下信息 # chkconfig --add nginx chkconfig: command not f ...

  10. Oracle 中 nvl、nvl2、nullif、coalesce、decode 函数的用法详解

    NVL(EXPR1,EXPR2) NVL2(EXPR1,EXPR2,EXPR3) NULLIF(EXPR1,EXPR2) COALESCE(EXPR1,,..,EXPRn) decode ------ ...