💎蓝桥杯系列文章
2023第十四届蓝桥杯模拟赛第二期个人题解(Java实现)
2023第十四届蓝桥杯模拟赛第三期个人题解(Java实现)
蓝桥杯备赛之动态规划篇——背包问题
💎前言
😘😘哈喽,大家好!这里是蓝桥杯系列文章的动态规划章节🔥🔥,今天要讲解的是区间动态规划的经典问题——涂色问题🍄
🙊🙊如果我写的内容有误,欢迎大家在评论区指正👏希望这篇文章对你有帮助❤❤同时欢迎关注我呦👇👇
💎温故而知新
🎬🎬首先再通过思维导图来回顾一下闫氏DP分析法:
🍄🍄如果新来的小伙伴还不知道是啥,可以去我看我上一篇文章,有详细介绍哦👇👇
🔥🔥蓝桥杯备赛之动态规划篇——背包问题🔥🔥
💎区间DP
🎯涂色
题目地址
蓝桥云课题库——涂色
问题描述
假设你有一条长度为 5 的木版,初始时没有涂过任何颜色。你希望把它的 5 个单位长度分别涂上红、绿、蓝、绿、红色,用一个长度为 5 的字符串表示这个目标:RGBGR。
每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色。例如第一次把木版涂成 RRRRR,第二次涂成 RGGGR,第三次涂成 RGBGR,达到目标。
用尽量少的涂色次数达到目标。
输入格式
输入仅一行,包含一个长度为 n 的字符串,即涂色目标。字符串中的每个字符都是一个大写字母,不同的字母代表不同颜色,相同的字母代表相同颜色。
其中,1 ≤ n ≤ 50。
输出格式
输出仅一行,包含一个数,即最少的涂色次数。
样例输入
AAAAA
样例输出
1
评测用例规模与约定
最大运行时间:1s
最大运行内存: 128M
🌞问题分析
📢📢 这道题用闫氏DP分析法该如何思考呢?
🐾🐾 状态表示:
涂色问题可以看做一个二维的问题,用f(i,j)表示
集合定义: 将区间 [ i , j ] 上染成涂色目标的所有涂色方案的集合。
集合属性: 所有涂色方案中的最少涂色次数。
🐾🐾 状态计算:
集合划分: 寻找最后一个不同点,即 i 和 j 颜色是否相同:区间 [ i , j ] [ i ,j ] [i,j]左右端点颜色相同、区间 [ i , j ] [ i ,j ] [i,j]左右端点颜色不同。
对于所有区间 [ i , j ] [ i ,j ] [i,j]左右端点颜色相同的涂色方案:
m i n { f ( i , j − 1 ) , f ( i + 1 , j ) } min\{f(i ,j-1),f(i+1,j)\} min{