[CQOI2007]涂色PAINT
题意:
给你目标字符串的状态,现可以将连续一段字符串染色,求最小的染色次数
题解:
我们定义dp[i][j]是区间i到区间j最小的涂色次数
区间dp的核心思想实际上是由一个个小区间进行合并成为大区间,所以我们在dp的时候应该从长度最短的下手,也就是长度为1的。
1.长度为1的区间,涂色次数为1.
2.长度区间为2的值:
它可以由两个长度为1的区间和并,但是这个题目比较特殊的一点就是,你图一次可以连续涂一个区间,所以如果s[i]==s[j]那么这个区间只需要涂一次,如果不同,那么就是两个区间次数的相加了。
3.长度为n的值:
仿照区间长度为2的时候,我们可以枚举区间中的某个分割点来进行递推,这就跟Floyd的核心思想差不多了(Floyd其实本质就是动态规划)。
但是这个题的要求,涂一次可以涂一个连续的区间所以说,如s[i] ==s[j]
那么我们就可以直接转移左区间或者右区间,因为涂一次可以图一个连续的区间。
综上所述:
转移方程
1. i==j时:dp[i][j]=1;
2. 当i!=j且s[i]==s[j]时:dp[i][j]=min(dp[i][j-1],dp[i+1][j])
3. 当i!=j且s[i]!=s[j]时:我们就需要枚举断电k ,dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j])
代码:
/*Keep on going Never give up*/
#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stdlib.h>
#include <queue>
#include <string>
const int maxn = 100;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const ll mod = 1e9+7;
using namespace std;
int dp[maxn][maxn];
char s[maxn];
int main(){scanf("%s",s+1);memset(dp,MaxN,sizeof dp);for(int i=0;i<=strlen(s+1);i++) dp[i][i]=1;for(int len=1;len<=strlen(s+1);len++){for(int i=1,j=i+len;j<=strlen(s+1);i++,j++){if(s[i]==s[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][strlen(s+1)]<<endl;return 0;
}
[CQOI2007]涂色PAINT相关推荐
- [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][ ...
- BZOJ 1260:[CQOI2007]涂色paint
(⊙o⊙)-,常规课考试又炸了!目测此次我要完蛋了... 又玩脱了,考数学的时候装B装大了! 算了,先进入正题... 题目描述: Description 假设你有一条长度为5的木版,初始时没有涂过任何 ...
- 【题解】 bzoj1260: [CQOI2007]涂色paint (区间dp)
bzoj1260,懒得复制,戳我戳我 Solution: 这种题目我不会做qwq,太菜了 区间打牌(dp) 用f[l][r]表示从l到r最少需要染几次色. 状态转移方程: 1.\(f[l][r]=mi ...
- 【算法•日更•第三十期】区间动态规划:洛谷P4170 [CQOI2007]涂色题解
废话不多说,直接上题: P4170 [CQOI2007]涂色 题目描述 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符 ...
- 算法学习 区间dp 涂色PAINT
题目链接: 牛客网 涂色PAINT 这是一道区间dp题,题目有小错误,字符串的长度不是5,而是小于1005的长度. 定义:f[i][j] 为区间[i,j]需要涂色最少的次数 我们可以发现这样一件事:我 ...
- 【每日一题】涂色PAINT
涂色PAINT:区间dp https://ac.nowcoder.com/acm/problem/19909 思路:和取数游戏一样设置dp状态. 设置状态: 表示区间涂[i,j]需要的最少次数. 状态 ...
- 洛谷P4170 [CQOI2007]涂色 题解
洛谷P4170 [CQOI2007]涂色 题解 题目链接:P4170 [CQOI2007]涂色 题意: 假设你有一条长度为 555 的木板,初始时没有涂过任何颜色.你希望把它的 555 个单位长度分别 ...
- 省选专练[CQOI2007]涂色
不好理解的DP 伪区间DP F(i,j)表示子串i-j实现的方式最小 当i=j时明显为1 当s[i]==s[j]时 这里是理解的重难点: 通过递归可知当你刷i的时候顺便刷到j就好了 然后就是标准的区间 ...
最新文章
- Luogu 2470 [SCOI2007]压缩
- php如何去除侧栏,设置内容区侧栏
- python mysql curros.executemany 批量添加
- 用RecyclerView打造一个轮播图
- HihoCoder - 1465 后缀自动机五·重复旋律8(后缀自动机)
- php 获取字符串中的url,php使用正则表达式获取字符串中的URL
- HTML5权威指南 11.通信API
- 深入前端研发效能治理:数据化运营思路及其实践
- 浅谈Taro和Apollo在开发过程中的实践
- linux系统是微内核结构,科普:微内核操作系统现状
- chm editor
- 宝塔定时任务执行php源码任务_在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现...
- cmd杀死MySQL进程命令
- mysqlbackup 重建带有gtid特性的slave
- 域环境安装企业从属CA两种方法
- 辽宁移动客服呼叫中心两级质检管理效果佳
- HTML静态网页我的家乡,html网站家乡 !
- 中景园0.96寸 OLED 显示屏 学习笔记
- css 加粗或斜体hover鼠标划过,导致异常闪动,整体宽度增加的解决办法
- 全球所有科学家影响力排名第五!这位中国院士到底有多厉害?