为方便起见,将Bellman-ford队列优化称为SPFA,= =

抓住 ZMF (ZMF.pas/c/cpp)

题目描述

话说这又是一个伸手不见五指的夜晚,为了机房的电子竞技事业永远孜孜不倦的 ZMF 小朋友躲在一个阴暗的角落(毫无疑问又搞起了)。当然,另一个神龙见首不见尾的黑影也偷偷地出现在了后门……此时我们敬爱的 MR.LI 开始为如何抓住 ZMF 发愁了:为了捉住 ZMF,经过其他人的座位是不可避免的,其他人也会发出或大或小的响声,而一旦响声之和超过了一定的值,把游戏当成作业的 ZMF 便会发现这一切,从而销毁作案现场(例如重新启动之类)。现在的你需要编写一个程序,判断出 MR.LI在不惊动 ZMF 的前提下,到达 ZMF 座位的最短路线。(求问被黑的ZMF是谁呢?>_<)

输入格式

第一行有两个数 N 和 P,分别表示座位个数(包括 MR.LI,MR.LI 的编号为 1,ZMF 的编号为 N) 和 ZMF 的警觉程度(即允许响声和的最大值)。N<=50,P<=50

接下来的 N 行,每行有 N 个数,第 I 行第 J 个数表示从 I 走到 J 的路程。0 表示不可到达。

最后有 N 行,每行 N 个数,第 I 行第 J 个数表示从 I 走到 J 所发出的响声。

输出格式

一个数 T,表示最短路径的长度。如果抓不到,则输出“what a pity”。

测试数据

输入
____________________
5 5
0 100 100 1 1
0 0 0 0 100
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 1 1 10 100
0 0 0 0 2
0 0 0 0 0
0 0 0 0 0
输出
____________________

200

这是一道例题。

首先,我们可以发现,是一个较为传统的最短路题。只是多了限制条件,响声和不能大于某个数。
那么可以将每条边的响声值设为重量,这就是一个背包问题了。但是要同时求出最短路(仁义厚道的是无需输出方案),怎么办呢?

注意到DP背包问题是DP的形式,F[余下总重]=max{F[余下总重],F[余下总重-w[当前节点]]+v[当前节点]}

由于是蒟蒻,以前没做过类似的题目= =,然后就SB了。受到WJZ大神的启发。。

而SPFA的松弛, 和背包问题很类似,F[i]=min{F[i],F[j]+P[j][i]}我们可以将它看成是DP。那么让我们加一维,变成这样:

F[i][j]=min{F[i][j],F[k][j-w[k][i]]+P[k][i]}

这样可以保证答案是由可行的路径松弛而来的,由于j是有范围的。

最后膜拜WJZ大神!今年一定是要Au的节奏!>_< [//如果没有Au一定是数据错了恩

双参数Bellman-ford带队列优化类似于背包问题的递推的更多相关文章

  1. POJ 1742 (单调队列优化多重背包+混合背包)

    (点击此处查看原题) 题意分析 给你n种不同价值的硬币,价值为val[1],val[2]...val[n],每种价值的硬币有num[1],num[2]...num[n]个,问使用这n种硬币可以凑齐[1 ...

  2. poj1860 bellman—ford队列优化 Currency Exchange

    Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 22123   Accepted: 799 ...

  3. 关于SPFA的双端队列优化

    7.11 Update 我做题的时候发现这样写会RE 因为在使用双端队列优化SPFA的时候 在将一个点加入队列的时候,如果队列已经空了 那么一旦出现dis[Q.front()]就会RE 可以这样修改 ...

  4. Vijos1834 NOI2005 瑰丽华尔兹 动态规划 单调双端队列优化

    设dp[t][x][y]表示处理完前t个时间段,钢琴停留在(x,y)处,最多可以走多少个格子 转移时只需逆着当前倾斜的方向统计len个格子(len为时间区间的长度,len=t-s+1),如果遇到障碍就 ...

  5. poj 3259 Wormholes : spfa 双端队列优化 判负环 O(k*E)

    /** problem: http://poj.org/problem?id=3259 spfa判负环: 当有个点被松弛了n次,则这个点必定为负环中的一个点(n为点的个数) spfa双端队列优化: 维 ...

  6. 队列优化dijsktra(SPFA)的玄学优化

    转载:大佬博客 最近想到了许多优化spfa的方法,这里想写个日报与大家探讨下 前置知识:spfa(不带任何优化) 由于使用较多 STLSTL ,本文中所有代码的评测均开启 O_2O2​ 优化 对一些数 ...

  7. 单调队列优化&&P1886 滑动窗口题解

    单调队列: 顾名思义,就是队列中元素是单调的(单增或者单减). 在某些问题中能够优化复杂度. 在dp问题中,有一个专题动态规划的单调队列优化,以后会更新(现在还是太菜了不会). 在你看到类似于滑动定长 ...

  8. 单调队列以及单调队列优化DP

    单调队列定义: 其实单调队列就是一种队列内的元素有单调性的队列,因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的. 单调队列的一般应用: 1.维护区间最值 2 ...

  9. 算法笔记--单调队列优化dp

    单调队列:队列中元素单调递增或递减,可以用双端队列实现(deque),队列的前面和后面都可以入队出队. 单调队列优化dp: 问题引入: dp[i] = min( a[j] ) ,i-m < j ...

随机推荐

  1. 4、面向对象以及winform的简单运用(继承与多态、命名空间与类库)

    继承 继承既子类与父类之间的关系.子类是父类的一种特例,子类拥有父类所没有的功能. 子类与父类之间的相互赋值——例: Parent p; Son c = new Son(); p = c; //正确, ...

  2. Javascript基础系列之(六)循环语句(do while循环)

    do/while 循环是 while 循环的变体.该循环会执行一次代码块,在检查条件是否为真之前,然后如果条件为真的话,就会重复这个循环. 语法结构如下 do { statement } while ...

  3. UITableViewdataSourse的协议所有方法

    UITableViewDataSource @required- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection ...

  4. Callable、Future和FutureTask

    创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口.这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如果需要获取执行结果,就必须通过共享变量或者使用线 ...

  5. ibatis selectKey用法问题

    其实就是相为SHIPMENT_HISTORY表加入一个主键sequence id shipmentHistoryId,加入一条记录,然后返回这个sequence id xml 代码 <inser ...

  6. 【BZOJ 3196】二逼平衡树 线段树套splay 模板题

    我写的是线段树套splay,网上很多人写的都是套treap,然而本蒟蒻并不会treap 奉上sth神犇的模板: //bzoj3196 二逼平衡树,支持修改某个点的值,查询区间第k小值,查询区间某个值排 ...

  7. Java设计模式-组合模式(Composite)

    组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便,看看关系图: 直接来看代码: public class TreeNode { private String name; private ...

  8. Netbeans 中的编译器相关配置

    gcc-core:C 编译器 gcc-g++:C++ 编译器 gdb:GNU 调试器 make:"make" 实用程序的 GNU 版本

  9. c#截图

    private void Form_Load(object sender, EventArgs e){  //接收web url  string colle = string.Empty;  stri ...

  10. 001-编译hadoop-2.5.2总结

    前两天废了很大的劲来对hadoop-2.5.2进行64位系统的手动编译,由于对linux系统环境以及hadoop本身的不熟悉,编译过程中也出现了很多的问题,在此记录一下,对自己以后再次编译和看到此文章 ...