poj3411 Paid Roads 状压+最短路

POJ - 3411 Paid Roads(Dijkstra+状压) 题意:个城市,条单向路,每一条路从到,如果之前已经经过了城市,花费可以为也可以为,没有经过城市,花费为,求从城市到的最小花费 思路:求最短路,多加一维表示已经走过的点的集合。 #include <stdio.h> #include <string.h> #include <queue> #include <algorithm> const in... 阅读详情

一个带权有向图,所有边<u,v>要么在v点收费,要么之前在某点交过费,求最小费用。

状压完图是带环的,求最短路即可。


#include <iostream>
#include <cstring>
#include <cctype>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <cstdio>
#include <set>
#include <map>
#include <queue>
#include <algorithm>
#define N 16
typedef long long LL;
#define fi first
#define se second
using namespace std;
struct edge
{
  int x , c , w1 , w2;
};
vector<edge> e[N];
int n , m , d[10][1 << 10];
bool f[10][1 << 10];
void work()
{
  int i , j , k , l , x; edge p;
  scanf("%d%d",&n,&m);
  while (m --)
  {
    scanf("%d%d%d%d%d",&j , &p.x , &p.c , &p.w1 , &p.w2);
    -- j , -- p.x , -- p.c;
    e[j].push_back(p);
  }
  for (i = 0 ; i < n ; ++ i)
    for (j = 0 ; j < 1 << n ; ++ j)
      d[i][j] = 1 << 30;
  memset(f , 0 , sizeof(f));
  queue< pair<int , int> > q;
  f[0][1] = 1 , q.push(make_pair(0 , 1)) ,d[0][1] = 0;
  while (!q.empty())
  {
    i = q.front().second , j = q.front().first , q.pop() , f[j][i] = 0;
    for (k = 0 ; k < e[j].size() ; ++ k)
    {
      x = e[j][k].x;
      if ((i & (1 << e[j][k].c)) && d[x][i | (1 << x)] > d[j][i] + e[j][k].w1)
      {
        d[x][i | (1 << x)] = d[j][i] + e[j][k].w1;
        if (!f[x][i | (1 << x)])
        {
          f[x][i | (1 << x)] = 1;
          q.push(make_pair(x , i | (1 << x)));
        }
      }
      if (d[x][i | (1 << x)] > d[j][i] + e[j][k].w2)
      {
        d[x][i | (1 << x)] = d[j][i] + e[j][k].w2;
        if (!f[x][i | (1 << x)])
        {
          f[x][i | (1 << x)] = 1;
          q.push(make_pair(x , i | (1 << x)));
        }
      }
    }
  }
  int ans = 1 << 30;
  for (i = 0 ; i < 1 << n ; ++ i)
    ans = min(ans , d[n - 1][i]);
  if (ans == 1 << 30)
    puts("impossible");
  else cout << ans << endl;
}

int main()
{
  work();
  return 0;
}


POJ 3411 Paid Roads 百炼 3148:样例分析+详细题解 题目链接:poj,百炼 题目大意 有 n 座城市和 m 条单向道路(两个城市之间可能有多条单向道路)。每次通过一条道路都要支付过路费(多次经过需要多次支付过路费),对于边 (ai,bi),过路费有两种支付方式: 如果之前到达过城市 ci,那么只需要支付 Pi块钱。(ci可能等于 ai)。 直接支付 Ri块钱。 问从 1 号城市到 n 号城市最少需要多少钱。 输入 第一行输入两个整数 n,m(1... 阅读详情

相关推荐

别再怕非观测区了!手把手教你用移相法搞定PMSM单电阻FOC的电流重构难题

本文详细解析了永磁同步电机(PMSM)单电阻FOC系统中非观测区的电流重构难题,重点介绍了移相法的工程实践。通过STM32平台的具体实现和调试指南,帮助工程师有效解决相电流检测中的采样窗口不足问题,提升系统稳定性和性能。

weixin_27252001的博客 434

POJ 3411 Paid Roads (状压DP)

Paid Roads 题意:111到nnn的最小花费,aaa到bbb的花费为,如果经过ccc为ppp,否则为rrr。 题解:dp[i][j]dp[i][j]dp[i][j]表示以jjj结尾状态为iii时的最小花费,则有dp[i∣1&amp;lt;&amp;lt;a][b]=min(dp[i∣1&amp;lt;&amp;lt;a][b],dp[i][a]+C[&nbsp;i&amp;gt;&amp;...

Eternally831143的博客 355

SAP COPA实战:手把手教你用CMOD增强搞定自定义特性派生(以客户字段为例)

本文详细介绍了在SAP COPA模块中通过CMOD增强实现自定义特性派生的全流程,以客户字段为例,展示了从特性设计、SPRO配置到特性派生逻辑实现的完整步骤。重点讲解了如何利用CMOD增强技术解决业务需求,提升获利能力段分析的灵活性和准确性。

weixin_30275415的博客 429

POJ3411 状态dp+松弛转移

状态转移有两种,一种是对于一个状态v找出这个状态能够来自哪些状态u,然后更新v,但有时这种转移方法不太好用,那么考虑另一种转移方法,对于一个状态u,我们考虑状态u能够影响的所有状态v,然后不断松弛,像spfa一样... 这题就是第二种转移方法。 另外Inq标记数组确实能节省时间,毕竟减少了节点入队次数... 这题不加inq16ms,加上inq 0ms #include #include #i

Matrix 1281

tiktok算法协议研究

经过上述分析,可以确定目标字符串来源于一段 JSON 数据,而这段 JSON 数据来自于一个经过加密的本地文件。对字符串 "sdi_v2" 进行 SHA-1 计算,得到 20 字节的结果;将第一步得到的数据进行MD5计算,生成16字节的结果;将第二步的结果转换为十六进制字符串,从而得到 32 字节的密钥。写这种算法分析的帖子真的是太无聊了,就先分析到这里吧,后续有机会再来谈下被加密的本地文件是怎么来的!!自我感觉TT的算法并不难,就是量太大了,所以我想问问有没有感兴趣的朋友来一起分析,欢迎联系。

2503_90751938的博客 2582

手把手教你用STM32的SPI驱动MCP2517FD实现CAN FD通信(附完整代码)

本文详细介绍了如何使用STM32通过SPI驱动MCP2517FD实现CAN FD通信,涵盖硬件连接、SPI驱动编写、寄存器配置及数据收发实战。提供完整代码示例和常见问题排查指南,帮助开发者快速构建高可靠性的CAN FD通信系统,适用于汽车电子和工业控制等领域。

weixin_30607029的博客 676

poj3411(状态压缩dp,dijkstra最短路)

/* translation: 给出一张图,求节点0到节点n-1花费的最小费用。对于一条边a->b,可以有一下两种不同的付费方式: 1.在点c提前预付,但此时必须经过点c,花费为r 2.在点b支付,花费为p solution: 状态压缩dp+dijkstra dp[i][s]:=走到i点时的最优解,且此时走过的点状态为s(包括i) 然后根据dijkstra不断松弛即可。 note:

林伏案的博客 431

C++语言程序设计教程第4版杨进才沈显君课后习题答案解析

为了更好地学习这门课程,我尝试在网上寻找一些学习资料和参考书籍,但效果并不是很理想。因此,我希望能有一些学长学姐或者是有经验的程序员能够分享一些学习经验和方法,让我更好地掌握这门课程。学习过程中,我发现这本书的内容非常丰富,讲解也非常详细,对于像我这样编程基础薄弱的学生来说,是一本非常实用的教材。同时,我也希望有经验的程序员能够推荐一些适合初学者的C++语言学习资料和工具,以便我能更好地学习和掌握这门课程。总之,希望能得到大家的帮助和支持,让我更好地学习和掌握C++语言程序设计。主 编: 杨进才,沈显君。

weixin_58833001的博客 1334

POJ3411 状态压缩DP

POJ3411 状态压缩DP 题目链接 链接: http://poj.org/problem?id=3411. 题目大意 给N个城市,m条路,并给出m条路的信息,每条信息给出起点a终点b和中间节点c,有两种付款方式 1、在中间节点c付款(就是可以提前交钱)-R(a,b); 2、到终点b付款-p(a,b)。 问1到N的最小花费 思路 dp[i][S] 经过在集合s中的点到达i的最短花费 1、当S中...

yoro的博客 500

华为OD机试双机位C卷 - 高矮个子排队 (C++/Py/Java/Js/Go/C)

华为OD机试双机位C卷 高矮个子排队,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 高矮个子排队。

qq_45776114的博客 2160

⑤单细胞学习-cellchat组间通讯差异分析

参考:

hx2024的博客 1980

POJ - 3411 Paid Roads 状压DP || dfs

传送门:POJ3411 题意:N个城市间有m条单向路,分别从a到b,可以在c处交P路费,也可以到b处交R路费。问从1到n的最少花费是多少。 思路:状压DP, dp[s][i]表示经过的城市集合状态为s,且当前在i号城市的最少花费。 注意由于原图有可能有环路,因此某个点可能经过不止一次,因此在状态转移的过程中有类似于dijkstra中的松弛操作,即对某一个状态不断更新。   这题另外的解法是

WA是一笔财富 421

Could not find a package configuration file provided by “boost_signals“

gmapping/slam_gmapping/gmapping/CMakeLists.txt:14 (find_package)问题在14行,注释该行。,该语句的用以为告诉项目Boost库文件所在。

weixin_72050316的博客 1027

[POJ 3411]Paid Roads[BFS][状压]

题目链接:[POJ 3411]Paid Roads[BFS][状压] 题意分析: 求从点1到达点N的最少花费。点和边可重复经过。V1->V2的费用分为两种:1.如果通过了某点C,那么可以考虑花费P通过;2.否则只能考虑花费R通过。 解题思路: 考虑常规搜索,单单考虑标记节点的话,有些重复的点就不经过了。再考虑标记边,边就不能重复了,两者都不行。根本上说是缺失了可以比较的状态,导致无法肯定什

闲停 791

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Poj 3411 Paid Roads(最短路)

题目地址:http://poj.org/problem?id=3411 思路:记录状态,松弛操作时判断即可。 #include #include #include #include #include #define debug using namespace std; const int maxn=15; const int INF=0x3f3f3f3f; struct Edge {

哆啦AC梦的博客 549

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

POJ 3411 Paid Roads(dfs)

*注:这一题很重要的是对与sh

code_or_code 946

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

POJ 3411 Paid Roads (最短路 + dp)

题目类型  搜索题 题目意思 给出 n 解题方法 基础DFS 题目既然要求方案要字典序最小 那么我们就从最小编号的起点开始搜索 即A1 搜索的过程中为了保证字典序最小我们必须制定合适的搜索顺序 题目输入的p是列的数量 q是行的数量那么我们定义 行下标 R = q 列下标 C=p 起点是A1 那么下一个测试点应该 是 R-2 C-1

yunyouxi0's blog 892

POJ 3411 Paid Roads 简单DFS

题目链接:http://poj.org/problem?id=3411

ChasingWaves 476

POJ-3411 Paid Roads

Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6472   Accepted: 2398 Description A network of m roads connects N cities (numbered from 1 to N). There may be more than

WZJRJ28 483

POJ 3411 Paid Roads

Description A network of m roads connects N cities (numbered from 1 to N). There may be more than one road connecting one city with another. Some of the roads are paid. There are two ways to pay

XDU_PYL的博客 442

poj 3411 Paid Roads(DFS)

题目链接:http://poj.org/problem?id=3411 题意:有n座城市,编号1~n,从a到b如果已经经过c城市,则需要p费用,否则需要r费用,问从1到n的最小费用是多少。 ①DFS: #include #include #include #include #include using namespace std; const int INF=0x3f3f3f3f; con

To be excellent! 331

(POJ 3411)Paid Roads <DFS>

Paid Roads DescriptionA network of m roads connects N cities (numbered from 1 to N). There may be more than one road connecting one city with another. Some of the roads are paid. There are two ways to

STILLxjy 952

poj 3411 Paid Roads

题目:http://poj.org/problem?id=3411

qqspeed 801

POJ 3411 Paid Roads

BFS + 状态压缩

Muti-Agent 2700

POJ3411 Paid Roads DFS

题目大意:有n个城市和m条道路(城市编号为1到n),从a城市经过c城市到达b城市(这里的a和c可以是同一个城市)的过路费有两种:(1)如果c城市已经走过,那么路费为p;(2)c城市没有走到过时路费为r;现在给出m条道路的信息,让你求出从城市1到城市n所需的最少路费。 分析:乍一看这倒题像是图论中的最短路问题,可是仔细想想并不是那回事。题中并没有说哪两个城市之间可达,只是说了从a城市经过c城市到达

AC_Gibson的专栏 729
上一篇: poj3692 Kindergarten 二分图最大独立集
下一篇: poj3685 Matrix 二分答案
Sd_无心插柳
博客等级 码龄14年 39粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值