首页 > 其他分享 >[刷题笔记] CF1132F Clear the String & [CQOI2007] 涂色

[刷题笔记] CF1132F Clear the String & [CQOI2007] 涂色

时间:2023-08-04 17:47:11浏览次数:46  
标签:ch String int Clear 数组 涂色 区间 include

Problem1

Problem2

双倍经验qwq

Description

初始时数组为空,每次可以选择一个区间\(l-r\)将其赋为同一个值,赋的值可以覆盖,给定数组的目标形式,求至少经过多少次操作使得空数组变成目标形式。

Solution

我们发现每次选择一个区间,大区间包含小区间,小区间可以推到大区间。因此考虑区间dp。

如何转移呢?

我们发现若数组为\(a\),左区间为\(l\),右区间为\(r\),若\(a_l = a_r\),则给区间\(l-r\)染色是不是就等于给区间\(l-(r-1)\)染色?因此我们得出部分状态转移方程:\(f_{l,r}=f_{l,r-1}(a_l=a_r)\)

需要注意初始化将\(f_{i,i}=1\)。因为区间若left=right只有一个数,是需要一次染色的。

剩下的就是区间之间的转移,枚举分组位置\(k\)套分组dp板子即可。

Code

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#define N 1001
#define INF 0x3f3f3f3f
using namespace std;
string str;
char ch[N];
int len;
int f[N][N];
int main()
{
    int p;
    scanf("%d",&p);
    scanf("%s",ch+1);
    len = strlen(ch+1);
    for(int i = 1;i <= len;i++) f[i][i] = 1;
    for(int i = 2;i <= len;i ++)
    {
        for(int l = 1;l <= len&&l+i-1 <= len;l++)
        {
            int r = l+i-1;
            f[l][r] = INF;
            if(ch[l] == ch[r]) f[l][r] = f[l][r-1];
            for(int k=l;k<=r;k++) f[l][r] = min(f[l][r],f[l][k]+f[k+1][r]);
        }
    } 
    cout<<"qwq"<<endl;
    cout<<f[1][len]<<endl;
    return 0;
}

标签:ch,String,int,Clear,数组,涂色,区间,include
From: https://www.cnblogs.com/SXqwq/p/17606593.html

相关文章

  • go语言基础-strings和strconv包
    作为一种基本数据结构,每种语言都有一些对于字符串的预定义处理函数。Go中使用 strings 包来完成对字符串的主要操作。前缀和后缀HasPrefix() 判断字符串 s 是否以 prefix 开头:strings.HasPrefix(s,prefixstring)boolHasSuffix() 判断字符串 s 是否以 suffix......
  • Java中如何向一个string类型的数组中添加数据
    在Java中,String类型的数组是固定长度的,一旦创建后就无法改变其长度。如果你需要向一个String类型的数组中添加数据,可以考虑使用ArrayList或LinkedList等可变长度的集合类型来代替。使用 ArrayList,你可以通过调用add()方法来向集合中添加元素,例如://创建一个ArrayList......
  • String requestUrl = StringUtils.replaceOnce(this.getRequestURI(), this.getContex
    当使用该行代码处理以下请求时:请求URL:http://example.com/myapp/products/details上下文路径(ContextPath):/myapp代码将执行以下操作:this.getRequestURI()返回"/myapp/products/details"。this.getContextPath()返回"/myapp"。StringUtils.replaceOnce("/myapp/products......
  • ORA-01922:必须指定级联以删除“string”
    错误信息【汉】ORA-01922:必须指定级联以删除“string”【英】ORA-01922:CASCADEmustbespecifiedtodrop'string'例在正常运行的数据库中,删除某个用户报错。版本在所有版本中都可能会遇到。原因在删除用户时,Oracle检测到该用户在数据库中还由与之关联的对象(例如表、视图、索引......
  • mysql插入报错java.sql.SQLException: Incorrect string value: '\xF0\x9F\x87\xA
    背景环境java8,centos7.9,mysql8.0.34新装的环境,默认给装了mysql8,想着与时俱进用下新版,结果插入就报错java.sql.SQLException:Incorrectstringvalue:'\xF0\x9F\x87\xA8\xF0\x9F...'forcolumn解决方法这个错误通常是由于MySQL数据库中的字符集不支持存储特定的字符或表情符......
  • HashSet的new两个相同的String类字符串的变化
    一、定义HashSet的底层是通过HashMap实现的,所以要通过HashMap去寻求答案二、源码分析其实关于这个问题的答案关键源码需在putVal方法中寻找,我用的版本是JDK8//源码publicVput(Kkey,Vvalue){returnputVal(hash(key),key,value,false,true);//......
  • const char * 与 char * 不兼容,QString转换时出现的问题
    QStringcameraIniPath=QString::fromLocal8Bit(m_sCameraIniPath[nIndex]);方式一(char*)cameraIniPath.toStdString().c_str()方式二charsDirPath[200];sprintf_s(sDirPath,"%s",cameraIniPath.toLocal8Bit().constData());//QString转char*方式三VS......
  • Qt中QString的arg()函数
    Qt中QString的arg()函数使用记录大致有如下3种用法:(1)arg(str1,str2,str3)其中一次可替换参数个数最多为9个,举例如下 输出为"123456789%10%11"要想全部替换,只需要接在后面继续使用一个.arg(“10”,“11”)即可也就是第二种方式(2)arg(str1).arg(str2).arg(s......
  • PostMan 如何在x-www-form-urlencode调试List<string>
    分析:第三方支持两种post请求方式: application/json和application/x-www-form-urlencode方式一:正常方式二异常:参数[loginIds]当前类型[String]转成目标类型[List]异常使用数组方式:数据统计不一致,不报错解决方案:命名至少两个相同的变量名称,变量名为空的也不能省略c#实现部分代码: /......
  • 浅谈Map<String, String[]> p=req.getParameterMap();
    这行代码用于获取当前HTTP请求中的所有参数,并将它们存储在一个Map<String,String[]>类型的对象中。解释如下:req:这是一个HttpServletRequest对象,表示当前的HTTP请求。通过它可以获取请求中的参数信息。getParameterMap():这是HttpServletRequest接口的方法,用......