题意:
给你目标字符串的状态,现可以将连续一段字符串染色,求最小的染色次数
题解:
我们定义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相关推荐

  1. [BZOJ1260][CQOI2007]涂色paint 区间dp

    1260: [CQOI2007]涂色paint Time Limit: 30 Sec  Memory Limit: 64 MB Submit: 1575  Solved: 955 [Submit][S ...

  2. bzoj 1260: [CQOI2007]涂色paint(区间DP)

    1260: [CQOI2007]涂色paint Time Limit: 30 Sec  Memory Limit: 64 MB Submit: 1681  Solved: 1018 [Submit][ ...

  3. BZOJ 1260:[CQOI2007]涂色paint

    (⊙o⊙)-,常规课考试又炸了!目测此次我要完蛋了... 又玩脱了,考数学的时候装B装大了! 算了,先进入正题... 题目描述: Description 假设你有一条长度为5的木版,初始时没有涂过任何 ...

  4. 【题解】 bzoj1260: [CQOI2007]涂色paint (区间dp)

    bzoj1260,懒得复制,戳我戳我 Solution: 这种题目我不会做qwq,太菜了 区间打牌(dp) 用f[l][r]表示从l到r最少需要染几次色. 状态转移方程: 1.\(f[l][r]=mi ...

  5. 【算法•日更•第三十期】区间动态规划:洛谷P4170 [CQOI2007]涂色题解

    废话不多说,直接上题:  P4170 [CQOI2007]涂色 题目描述 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符 ...

  6. 算法学习 区间dp 涂色PAINT

    题目链接: 牛客网 涂色PAINT 这是一道区间dp题,题目有小错误,字符串的长度不是5,而是小于1005的长度. 定义:f[i][j] 为区间[i,j]需要涂色最少的次数 我们可以发现这样一件事:我 ...

  7. 【每日一题】涂色PAINT

    涂色PAINT:区间dp https://ac.nowcoder.com/acm/problem/19909 思路:和取数游戏一样设置dp状态. 设置状态: 表示区间涂[i,j]需要的最少次数. 状态 ...

  8. 洛谷P4170 [CQOI2007]涂色 题解

    洛谷P4170 [CQOI2007]涂色 题解 题目链接:P4170 [CQOI2007]涂色 题意: 假设你有一条长度为 555 的木板,初始时没有涂过任何颜色.你希望把它的 555 个单位长度分别 ...

  9. 省选专练[CQOI2007]涂色

    不好理解的DP 伪区间DP F(i,j)表示子串i-j实现的方式最小 当i=j时明显为1 当s[i]==s[j]时 这里是理解的重难点: 通过递归可知当你刷i的时候顺便刷到j就好了 然后就是标准的区间 ...

最新文章

  1. Luogu 2470 [SCOI2007]压缩
  2. php如何去除侧栏,设置内容区侧栏
  3. python mysql curros.executemany 批量添加
  4. 用RecyclerView打造一个轮播图
  5. HihoCoder - 1465 后缀自动机五·重复旋律8(后缀自动机)
  6. php 获取字符串中的url,php使用正则表达式获取字符串中的URL
  7. HTML5权威指南 11.通信API
  8. 深入前端研发效能治理:数据化运营思路及其实践
  9. 浅谈Taro和Apollo在开发过程中的实践
  10. linux系统是微内核结构,科普:微内核操作系统现状
  11. chm editor
  12. 宝塔定时任务执行php源码任务_在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现...
  13. cmd杀死MySQL进程命令
  14. mysqlbackup 重建带有gtid特性的slave
  15. 域环境安装企业从属CA两种方法
  16. 辽宁移动客服呼叫中心两级质检管理效果佳
  17. HTML静态网页我的家乡,html网站家乡 !
  18. 中景园0.96寸 OLED 显示屏 学习笔记
  19. css 加粗或斜体hover鼠标划过,导致异常闪动,整体宽度增加的解决办法
  20. 全球所有科学家影响力排名第五!这位中国院士到底有多厉害?

热门文章

  1. jieba分词的使用
  2. OSPF有五种报文,hello,dd,lsr,lsu,lsack
  3. Python之Scrapy爬虫的常用命令
  4. 基于OpenCV的数字识别系统
  5. 在机器人的眼里到底能看到什么,它们和人类的视觉系统有什么区别?
  6. 机器学习库Scikit-learn库使用总结.pptx
  7. 服不服?40行Python代码,实现卷积特征可视化
  8. 从数据集到2D和3D方法,一文概览目标检测领域进展
  9. Task02——零基础入门NLP - 新闻文本分类之数据读取与分析
  10. Mysql 根据一个表数据更新另外一个表