洛谷P4170 [CQOI2007]涂色 题解
洛谷P4170 [CQOI2007]涂色 题解
题目链接:P4170 [CQOI2007]涂色
题意:
假设你有一条长度为 555 的木板,初始时没有涂过任何颜色。你希望把它的 555 个单位长度分别涂上红、绿、蓝、绿、红色,用一个长度为 555 的字符串表示这个目标:RGBGR\texttt{RGBGR}RGBGR。
每次你可以把一段连续的木板涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色。例如第一次把木板涂成 RRRRR\texttt{RRRRR}RRRRR,第二次涂成 RGGGR\texttt{RGGGR}RGGGR,第三次涂成 RGBGR\texttt{RGBGR}RGBGR,达到目标。
用尽量少的涂色次数达到目标。
考虑区间dp
设 dp[i][j]dp[i][j]dp[i][j] 表示涂区间 [i,j][i,j][i,j] 的最小花费
当 i=ji=ji=j 时,有
dp[i][j]=1dp[i][j]=1 dp[i][j]=1
当 i≠ji\ne ji=j 时,
若 a[i]=a[j]a[i]=a[j]a[i]=a[j] ,此时只需要 [i+1,j][i+1,j][i+1,j] 或 [i,j−1][i,j-1][i,j−1] 首次涂的时候多涂一格即可
dp[i][j]=min(dp[i+1][j],dp[i][j−1])dp[i][j]=\min(dp[i+1][j],dp[i][j-1]) dp[i][j]=min(dp[i+1][j],dp[i][j−1])若 a[i]≠a[j]a[i]\ne a[j]a[i]=a[j] , a[i],a[j]a[i],a[j]a[i],a[j] 都可以尝试向内扩展,显然 [i,j][i,j][i,j] 首次涂会涂两种颜色,考虑枚举其断点 kkk
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j])dp[i][j]=\min(dp[i][j],dp[i][k]+dp[k+1][j]) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j])
代码:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;
#define int long long
#define INF 0x3f3f3f3f3f3f3f3f
#define N (int)(55)int n,dp[N][N];
char a[N];
signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);// freopen("check.in","r",stdin);// freopen("check.out","w",stdout);cin >> (a+1);n=strlen(a+1);memset(dp,0x3f,sizeof(dp));for(int i=1; i<=n; i++)dp[i][i]=1;for(int len=2; len<=n; len++)for(int i=1,j=i+len-1; i+len-1<=n; i++,j++){if(a[i]==a[j])dp[i][j]=min(dp[i+1][j],dp[i][j-1]);else for(int k=i; k<j; k++)dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);}cout << dp[1][n] << endl;return 0;
}
转载请说明出处
洛谷P4170 [CQOI2007]涂色 题解相关推荐
- 【算法•日更•第三十期】区间动态规划:洛谷P4170 [CQOI2007]涂色题解
废话不多说,直接上题: P4170 [CQOI2007]涂色 题目描述 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符 ...
- 洛谷P4170 [CQOI2007]涂色题解
废话: 这个题我第一眼看就是贪心呐, 可能是我之前那做过一道类似的题这俩题都是关于染色的 现在由于我帅气无比的学长的指导, 我已经豁然开朗, 这题贪心不对啊, 当时感觉自己好厉害贪心都能想出来 差点就 ...
- 【题解】洛谷P1283 平板涂色(搜索+暴力)
思路 看到n<16 整个坐标<100 肯定想到暴力啊 蒟蒻来一发最简单易懂的题解(因为不会DP哈 首先我们用map数组来存坐标图 注意前面的坐标需要加1 因为输入的是坐标 而我们需要的是格 ...
- 洛谷 P1162 填涂颜色题解
题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方向.现要求把闭合圈内的所有空间都填写成22.例如:6 \times 66×6的方阵(n=6n=6) ...
- 【动态规划】P4170 :涂色(区间dp)
初始化: 因为要求 最小值,所有dp初始化为INF 当区间长度为1时,dp为1 枚举时先枚举小区间 #include<iostream> #include<cstring> # ...
- [BZOJ1260][CQOI2007]涂色paint 区间dp
1260: [CQOI2007]涂色paint Time Limit: 30 Sec Memory Limit: 64 MB Submit: 1575 Solved: 955 [Submit][S ...
- bzoj 1260: [CQOI2007]涂色paint(区间DP)
1260: [CQOI2007]涂色paint Time Limit: 30 Sec Memory Limit: 64 MB Submit: 1681 Solved: 1018 [Submit][ ...
- 洛谷P1129 [ZJOI2007] 矩阵游戏 题解
洛谷P1129 [ZJOI2007] 矩阵游戏 题解 题目链接:P1129 [ZJOI2007] 矩阵游戏 题意:给定一张有黑白棋子的正方形棋盘,问存不存在解法使得经过若干次交换行或列的操作后,左上角 ...
- 洛谷P3336 [ZJOI2013]话旧 题解
洛谷P3336 [ZJOI2013]话旧 题解 题目链接:P3336 [ZJOI2013]话旧 题意:小林跟着银河队选手去了一趟宇宙比赛,耳濡目染,变得学术起来.回来后,他发现世界大变样了.比丘兽究级 ...
最新文章
- 小程序navigateBack,子页面传值给父页面
- 第四周实践项目2 算法库——单链表
- 特殊方法求1~n的和
- 【半小时大话.net依赖注入】(一)理论基础+实战控制台程序实现AutoFac注入
- 华为二面!!!被问常用API,这也太偏门了吧,我秀了一波hhhh~
- 485光隔离中继器产品特点及应用领域介绍
- python2和python3的print语句语法有什么不同_Python3.2的版本,输入print语句总是出错,是什么原因?...
- 权限 shareuser certificat Runtime.exec
- Qt学习之路(54): 自定义拖放数据对象
- VXLAN简明学习笔记(原创)
- mes选型与实施指南_六大类型MES企业大盘点告诉你如何选择正确选择MES
- C语言-学生管理系统
- H265视频转码H264视频
- 机器视觉软件入门(2)
- does not have a companion object, and thus must be initialized here
- 如何调用腾讯的IP库?
- torch.randn和torch.rand有什么区别
- kindle长期未使用,界面显示电池感叹号
- ping服务器网速的工具
- 【hexo】基础教程-三-添加网易云音乐
热门文章
- 芝诺数解|【二】风禾尽起,且住为佳——重庆租房
- do while和while的区别
- Java小白的数据库爱情(四)Oracle DDL、DML使用
- keras之数据预处理
- 程序员老了怎么办?做什么好?
- Qt通过QAxWidget来使用flash控件的问题
- lightroom初学
- 万用表怎么测量电池容量_万用表怎么检测电池容量_电池电量
- 用友携YonSuite亮相云栖大会,全方位生态合作再提速
- 计算机学院晚会标题,计算机学院举办“计忆留夏·e彩纷呈”2017届毕业生晚会...