解题思路

看了一下题解,感觉题解貌似有些错误。所以把我的见解放在这里,希望路过的大佬可以帮忙解释一下 QAQ

就是这里的更新 $dp[i-1][i]$ 和 $dp[i][i-1]$ 的时候,之前博主说的是 $dp[i][j]$ 表示第一条路走到了i第二条路走到了 $j$,并且 $i>j$,且 $1\rightarrow i$上的点都走过了。

那它更新的时候难道不是向下面这样吗

希望大佬能够帮忙解释一下。蟹蟹蟹蟹٩('ω')و

-------------分割线-------------

既然是从起点跑到终点再从终点跑回来。那么就可以将其看作是从终点到出发点 (或者从出发点到终点都一样) 两条完全不重合路径。

设 $dp[i][j]$ 表示第一条路径 (A) 走到了第 $i$ 个点上,第二条路径 (B) 走到了第 $j$ 个点上,并且 $1\rightarrow i$ 这段上和 $1\rightarrow j$ 的所有点都被走过。

那么就会出现下面两种情况 (跳一格还是跳若干格),这两种情况下又有两种情况 (A 跳还是 B 跳)

  • 当前跳的这一步只是跳了一个格子

    • A 上一步在 B 上一步后面 (远) 那么直接就是 A 通过跳一步到达了 $i$,而 B 保持在原地不动。$dp[i][j] = \min \{ dp[i][j],dp[i-1][j]+|dist[i]-dist[j]| \}$
    • A 上一步在 B 上一步前面 (近) 那么就是 B 通过跳一步到达了 $i$,而 A 保持原地不动。$dp[j][i] = \min \{ dp[j][i], dp[j][i-1]+|dist[i]-dist[j]| \}$
  • 当前跳的这一步越过了若干格子
    • A 上一步在 B 之前好多个格子,那么 A 直接跳到 $i$,B 保持原地不动。$dp[i][i-1] = \min \{ dp[i][i-1],dp[j][i-1] + |dist[i]-dist[j]| \}$
    • A 上一步在 B 之后好多个格子,那么 B 直接跳到 $i$,A 保持原地不动。$dp[i-1][i] = \min \{ dp[i-1][i],dp[i-1][j] + |dist[i]-dist[j]| \}$

附上代码

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn = ;
int n, a[maxn], dp[maxn][maxn], Ans = ;
inline int abs(int x) {
return x > ? x : -x;
}
int main() {
scanf("%d", &n);
for(int i=n; i>=; i--)
scanf("%d", &a[i]);
memset(dp, 0x7f, sizeof(dp));
dp[][] = , dp[][] = dp[][] = abs(a[]-a[]);
for(int i=; i<=n; i++) {
for(int j=; j<i-; j++) {
dp[i][j] = min(dp[i][j], dp[i-][j] + abs(a[i] - a[i-]));
dp[j][i] = min(dp[j][i], dp[j][i-] + abs(a[i] - a[i-]));
dp[i][i-] = min(dp[i][i-], dp[j][i-] + abs(a[i] - a[j]));
dp[i-][i] = min(dp[i-][i], dp[i-][j] + abs(a[i] - a[j]));
}
}
for(int i=; i<=n; i++)
Ans = min(Ans, dp[i][n]);
printf("%d", Ans);
}

「 RQNOJ PID204 」 特种部队的更多相关文章

  1. 前端构建工具之gulp(一)「图片压缩」

    前端构建工具之gulp(一)「图片压缩」 已经很久没有写过博客了,现下终于事情少了,开始写博吧 今天网站要做一些优化:图片压缩,资源合并等 以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的 ...

  2. fir.im Weekly - 如何打造 Github 「爆款」开源项目

    最近 Android 转用 Swift 的传闻甚嚣尘上,Swift 的 Github 主页上已经有了一次 merge>>「Port to Android」,让我们对 Swift 的想象又多 ...

  3. 更新日志 - fir.im「高级统计」功能上线

    距离 2016 年到来只剩 10 个日夜,fir.im 也准备了一些新鲜的东西,比如「高级统计」功能和「跳转应用商店」功能,帮助你更好地管理.优化应用,欢迎大家试用反馈:) 新增高级统计功能 这次更新 ...

  4. Notepad++ 开启「切分窗口」同时检视、比对两份文件

    Notepad++ 是个相当好用的免费纯文本编辑器,除了内建的功能相当多之外,也支持外挂模块的方式扩充各方面的应用.以前我都用 UltraEdit 跟 Emeditor,后来都改用免费的 Notepa ...

  5. 「zigbee - 1」工欲善其事必先利其器 - IAR for 8051 IDE customization

    最近在实验室做一些 Zigbee 相关的事情,然而一直没在博客上记录啥东西,也不像原来在公司有动力在 Confluence wiki 上扯东扯西.直到前些阵子,跑到 feibit 论坛上(国内较大的一 ...

  6. 「C语言」文件的概念与简单数据流的读写函数

    写完「C语言」单链表/双向链表的建立/遍历/插入/删除 后,如何将内存中的链表信息及时的保存到文件中,又能够及时的从文件中读取出来进行处理,便需要用到”文件“的相关知识点进行文件的输入.输出. 其实, ...

  7. 「C语言」Windows+EclipseCDT下的C语言开发环境准备

    之前写过一篇 「C语言」在Windows平台搭建C语言开发环境的多种方式 ,讨论了如何在Windows下用DEV C++.EclipseCDT.VisualStudio.Sublime Test.Cl ...

  8. 如何对抗 WhatsApp「蓝色双勾」-- 3 个方法让你偷偷看讯息

    WhatsApp 强制推出新功能「蓝色双勾 (✔✔)」 ,让对方知道你已经看过讯息.一众用户反应极大,因为以后不能再藉口说未看到讯息而不回覆.究竟以后 WhatsApp 是否真的「更难用」? 幸好还有 ...

  9. FileUpload控件「批次上传 / 多档案同时上传」的范例--以「流水号」产生「变量名称」

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/19/multiple_fileupload_asp_net_20130819. ...

随机推荐

  1. Struts数据验证

    Action类继承了ActionSupport类,而该类实现了Action.Validateable.ValidationAware.TextProvider.LocaleProvider和Seria ...

  2. SRM598 Div1

    这次直接进到div1里面搞了,不过div1果然难度要高一些 第一题直接贪心算法了... 先排序,然后判断是否三个小于100,然后2个,最后一个 第二题看错了输入数据,理解错了题意,失误 第三题比较难办 ...

  3. JButton的setRollover出现的奇怪问题

    设置了setRollover,可以正常出现状态但是却不会回到默认状态. 研究了一下才发现,repaint的时候不会清除背板而是覆盖上去的, 所以如果原图是透明图就会出现状态不变的情况

  4. linux 查看php扩展

    php -i |less 查看配置文件在哪里,编译参数 php -m |less 查看php加载的模块 less可以自由的上下访问,比more要灵活一点. 如果不使用less,信息一次性给予,不太好查 ...

  5. Java 工程与 Eclipse 高级用法

    0. 显示各种视图(perspective)及工具窗口 [Window]⇒ [Perspective]⇒ [Open perspective]⇒ other(如下图所示): [Window]⇒ [Sh ...

  6. 第十二周 Leetcode 354. Russian Doll Envelopes(HARD) LIS问题

    Leetcode354 暴力的方法是显而易见的 O(n^2)构造一个DAG找最长链即可. 也有办法优化到O(nlogn) 注意 信封的方向是不能转换的. 对第一维从小到大排序,第一维相同第二维从大到小 ...

  7. jquery input 赋值和取值

    记录一下: 在写一个input赋值,二话不说就直接利用了$('#xx').val()来进行取值和赋值,取值ok,赋值后利用alert显示正确,但是在html上并没有正确的显示出来,后来改为使用如下代码 ...

  8. Sql 主键设置

    1.开发数据库时常用命名规范 1>.使用不包含数字的单数表名,如果必要的话可以增加模块名前缀. 2>.对于主键的命名,使用表名+ID的形式. 3>.作为外键的列的名字应该与它们所对应 ...

  9. c++ memset函数

    函数名称:memset 函数所需头文件:#include<cstring> 函数作用:内存赋值函数,用来给某一块内存空间进行赋值的. 函数结构:memset(变量,一个数字,一个数字)  ...

  10. 模拟 URAL 1149 Sinus Dances

    题目传送门 /* 模拟:找到规律分别输出就可以了,简单但是蛮有意思的 */ #include <cstdio> #include <algorithm> #include &l ...