link

首先我们可以注意到一个非常无聊的性质。先一直向右边走,然后折返回来向左边走,本质上与先向右走,然后向左走,再向右走这样循环走完整个路程是一致的。

根据这个性质,我们可以将向左走与向右走两个东西放在一起进行 DP。考虑状态 \(f[i][j]\) 表示最后一步向右走到 \(i\) 最后一步向左走到 \(j\)。我们考虑什么状态可以更新到当前状态。

我们容易发现,我们在 DP 的过程中实际上每次枚举 \(i\) 时,都保证了 \(i\) 之前的所有状态都更新了。即我们可以保证,\(i\) 之前的点都已经经过了。我们只需要考虑当前这一步如何走。

那么很简单的转移。考虑我们本质上是要找两条不相交的路径覆盖直线上的每个点。所以我们就可以硬淦出一个状态转移方程(大分类讨论)。

我们设 \(k=\max(i,\,j)+1\),则我们下一步就是要转移到这个位置(走到下一个点)。我们不需要讨论当前这一步是需要向左走还是向右走,在状态转移 \(i\) 变化的过程中,会自动的完成向左走和向右走的改变。我们只需要考虑向右走的情况就可以了,即状态的转移基于走一步而不是走的方向。

那么我们容易得到:
\[
\begin{cases}
f[i][k]=\min(f[i][k],f[i][j]+dis[j][k])\\
f[k][j]=\min(f[k][j],f[i][j]+dis[k][i])\\
\end{cases}
\]

为什么这样转移没问题呢?注意到我们转移的时候,实际上是分了两种情况进行转移,即我们让 \(i\) 在这一步中跳到了 \(k\) 而 \(j\) 不变与让 \(j\) 在这一步中跳到了 \(k\) 而 \(i\) 不变。这样实际上就对应于讨论了每一种跳法。每一次只能向前多跳一步。

状态转移图的话,可以随便用 GraphViz 画一个出来,下面这张图为 \(n=5\) 时的状态转移图(矢量图,可以放大观看,箭头指向转移方格的右边框,如果搞不清了的话,鼠标放在线上会有提示):

嗯,有点乱,但是仔细观察我们还是可以发现其中的一些规律的。每个状态都转移到了两个点上。不难发现转移到的两个点对应的正好是对应向左和向右跳的位置。所以这从另一个方面印证了我们的状态转移没有问题。

RQNOJ #204 特种部队 sol的更多相关文章

  1. 「 RQNOJ PID204 」 特种部队

    解题思路 看了一下题解,感觉题解貌似有些错误.所以把我的见解放在这里,希望路过的大佬可以帮忙解释一下 QAQ 就是这里的更新 $dp[i-1][i]$ 和 $dp[i][i-1]$ 的时候,之前博主说 ...

  2. PIC10F200/202/204/206/220/222/320/322芯片解密程序复制多少钱?

    PIC10F200/202/204/206/220/222/320/322芯片解密程序复制多少钱? PIC10F单片机芯片解密型号: PIC10F200解密 | PIC10F202解密 | PIC10 ...

  3. PHP build notes - WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: 3.0, min: 204, excluded: 3.0).

     WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: 3.0, ...

  4. RQNOJ 490 环形石子合并

    题目链接:https://www.rqnoj.cn/problem/490 题目描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一 ...

  5. 利用 Serial Over Lan(SOL)搭建 XEN 的调试信息输出环境

    如有转载,请注明出处与本文连接,谢谢! 修改XEN的源码实现额外的功能,需要有一个调试环境来得到XEN的调试信息(有关源码编译并安装 XEN 请阅读我以前的博文:在CentOS下源码安装 Xen并搭建 ...

  6. ShareSDK 集成 Google+ 登录 400. Error:redirect_uri_mismatch 和 Error Domain=ShareSDKErrorDomain Code=204

    最近在集成ShareSDK中 Google+ 登录授权时候 出现了如下几个问题 1.    400.  Error:redirect_uri_mismatch 出现这种情况, redirectUri应 ...

  7. grub的sol

    http://smcijohnny.blogspot.com/2015/06/linuxsolserial-over-lan.html https://www.hiroom2.com/2016/06/ ...

  8. 士兵站队问题sol

    作者:http://www.cnblogs.com/taoziwel/articles/1859577.html 相类似题目:输油管道问题 [问题描述] 在一个划分成网格的操场上,n个士兵散乱地站在网 ...

  9. dell ipmi sol

    http://blog.arnoudvermeer.nl/post/52375062605/howto-setup-ipmi-sol-on-a-dell-r-series-server http:// ...

随机推荐

  1. HDU 5308 I Wanna Become A 24-Point Master(2015多校第二场)

    I Wanna Become A 24-Point Master Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 ...

  2. ios29--多线程

    进程是指在系统中正在运行的一个应用程序(一个程序可以对应多个进程).每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内.比如同时打开迅雷.Xcode,系统就会分别启动2个进程.1个进程要 ...

  3. YTU 2677: 韩信点兵

    2677: 韩信点兵 时间限制: 1 Sec  内存限制: 128 MB 提交: 61  解决: 38 题目描述 刘邦问韩信:"你觉得我可以带兵多少?"韩信:"最多十万. ...

  4. JQuery操作下拉框

    转载自下面的链接,很有用的. http://www.cnblogs.com/yrhua/archive/2012/11/04/2753571.html 要实现这种效果: HTML代码 <scri ...

  5. vue学习笔记(1)

    1.检测变化 <ul> <li v-for="item in list">{{item}}</li> </ul> <scrip ...

  6. Python机器学习算法 — 支持向量机(SVM)

    SVM--简介 <α∗j<C,可得:          构造决策函数:  5.求最优解         要求解的最优化问题如下:          考虑使用序列最小最优化算法(SMO,se ...

  7. Java多线程(五)停止线程 interrupt

    调用interrupt方法仅仅是在当前线程中打了一个停止的标记,并不是真正停止线程. this.interrupted() :测试当前线程是否已经中断,执行后具有将状态标志清除为false的功能 is ...

  8. 基于itchat实现微信群消息同步机器人

    原始网址:http://www.jianshu.com/p/7aeadca0c9bd# 最近 全栈数据工程师养成攻略 的微信群已经将近500人,开了二群之后为了打通不同微信群之间的消息,花了点时间做了 ...

  9. [C++ STL] map使用详解

    一.set介绍: Map由红黑树实现,其元素都是"键值/实值"所形成的一个对组(key/value pairs).每个元素有一个键,是排序准则的基础.每一个键只能出现一次,不允许重 ...

  10. SpringBoot-redis-session

    配置pom <parent> <groupId>org.springframework.boot</groupId> <artifactId>sprin ...