给定数字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. Java常见异常及解释

  2. ABP后台服务之作业调度Quartz.NET

    一.简介 Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活 ...

  3. thymeleaf:日常使用总结

    1.th:href 获得当前的根路径 th:href="@{/}" 2.select输出并自动选中 <select class="form-control sele ...

  4. python学习第42、43天 HTML\CSS

    前端是什么? 帮助不了解后端程序的客户轻松使用程序的工具,可以提升工作效率,提供各种各样的体验. 通用的前端大致会使用三种语言,用在三个不同的方面对前端进行架构和优化,这里也只介绍这三种 web前端常 ...

  5. 修改oracle数据库允许连接的数

    当前连接数:select count(*) from v$process;查询数据库允许的最大连接数: select value from v$parameter where name = 'proc ...

  6. 细说Django的中间件

    分析Django的生命周期,我们知道所有的http请求都要经过Django的中间件. 假如现在有一个需求,所有到达服务端的url请求都在系统中记录一条日志,该怎么做呢? Django的中间件的简介 D ...

  7. Vue2 Virtual DOM

    vue 虚拟dom 的重点 是以 javascript 对象模拟 dom 节点. //用Javascript代码表示DOM节点的伪代码 Let domNode = { tag: 'ul' attrib ...

  8. mongodb基类封装实例

    mongodb的基类 1 <?php 2 3 namespace BI\Service\MongoDB; 4 5 use MongoDB\Driver\BulkWrite; 6 use Mong ...

  9. SpringBoot集成多数据源

    多数据源就是连接多个数据库 1.在application.properties中配置两个数据库 spring.datasource.driverClassName=com.mysql.jdbc.Dri ...

  10. laravel 频率限制throttle

    在 Laravel 5.6 中,还引入了频率限制功能.所谓频率限制,指的是在指定时间单个用户对某个路由的访问次数限制,该功能有两个使用场景,一个是在某些需要验证/认证的页面限制用户失败尝试次数,提高系 ...