【题解】乌龟跑步
一只乌龟由于智商低下,它只会向左或向右走,不过它会遵循主人小h的指令:F(向前走一步),T(掉头)。
现在小h给出一串指令,由于小h有高超的计算能力,他可以马上知道乌龟最后走到哪里。为了难倒小h,他的好朋友小c就说,现在让你修改其中n个指令,使得乌龟移动到离起点最远的地方。(修改是指“T”变成“F”,或“F”变成“T”,可以对同一个指令多次修改)。乌龟一开始在0点
解析:
其实并不难。
这道题不是做不来,实在是看题不够仔细。。
这里把题目的n用m表示。
首先,本题有两个操作:向前走一步和掉头(掉头是换方向,而不是向后走一步)。本题要我们求m次操作后,使最后乌龟离起点最远。显然,由“恰好m次操作”就可以看出本题绝对不是贪心(约束条件太多),其次,T使前进方向改变,F则是向前走一步,有可能走得远但方向错,而改变方向又会减少操作次数,所以一定想到DP
设 d p [ i ] [ j ] [ k ] [ l ] dp[i][j][k][l] dp[i][j][k][l]表示第i个操作序列,用了j次改变操作,k=1表示正向,k=0表示反向,l=0表示离起点最大,l=1表示离起点最小(反方向的最远)。显然满足最优子结构,离起点越大或越小最好,因为离起点的距离不影响决策。
当 a [ i ] = = T a[i]==T a[i]==T时:
- 改变为F,方向不变,走一格,到下一个操作序列
- 不变,方向变反,不动,到下一个操作序列
当 a [ i ] = = F a[i]==F a[i]==F时:
- 改变为T,方向变反,不动,到下一个操作序列
- 不变,方向不变,走一格,到下一个操作序列
注意:可以使用两次改变操作,变为j+2,其他参数不变
边界:
d
p
[
n
+
1
]
[
m
]
[
k
]
[
l
]
=
0
dp[n+1][m][k][l]=0
dp[n+1][m][k][l]=0
d
p
[
i
]
[
j
]
[
k
]
[
l
]
=
+
−
0
x
3
f
3
f
3
f
3
f
(
j
>
m
)
dp[i][j][k][l]=+-0x3f3f3f3f (j>m)
dp[i][j][k][l]=+−0x3f3f3f3f(j>m)
__EOF__

本文链接:https://www.cnblogs.com/cqbzly/p/17530413.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」