首页 > 其他分享 >P4170 [CQOI2007] 涂色(天赋哥不要点进来)

P4170 [CQOI2007] 涂色(天赋哥不要点进来)

时间:2023-12-11 19:48:36浏览次数:35  
标签:int 整体 天赋 P4170 涂色 区间 断点 CQOI2007

前言

翻遍洛谷题解,看到大家都在套模板,却很少有人讲出为什么,使我十分崇拜天赋哥。

原题链接

关于这题的一些事实性证据

事实1.来自

事实2.来自

事实3.来自

事实4.来自

整理上述事实

1.每一次”最短“最优涂色,要么在其他颜色的基础上涂,这称之为融入一个整体;要么另辟蹊径单独找一块地涂,这称为创立一个整体。
2.任一两端颜色不同的区间,区间内必然存在两个及以上的整体,所以枚举区间内的断点其实就是在找整体与整体之间的分割点。如果断电不在整体间的分割点上,值会多算一部分,就大了;断点无论在哪两个区间的分割点上,其dp和都是一样的。

代码如下

#include<bits/stdc++.h>
using namespace std;
int dp[55][55]={0};
int main()
{
    char s[100];
    cin>>s;

    int n=strlen(s);
    for(int i=0;i<n;i++) dp[i][i]=1;

    for(int k=2;k<=n;k++)
        for(int i=0;i+k-1<n;i++)
        {
            int j=i+k-1;
            if(s[i]==s[j]) dp[i][j]=dp[i][j-1];
            else
            {
                int ans=2e9;
                for(int m=i;m+1<=j;m++)ans=min(ans,dp[i][m]+dp[m+1][j]);
                dp[i][j]=ans;
            }
        }
    cout<<dp[0][n-1];
    return 0;
}

标签:int,整体,天赋,P4170,涂色,区间,断点,CQOI2007
From: https://www.cnblogs.com/pure4knowledge/p/17895389.html

相关文章

  • Q7.4.1.2. 奇怪的方格涂色 题解
    原题链接首先想到暴力网络流:考虑最小割,\(S\)表示染黑色,\(T\)表示染白色。每个格子\(i\),连\((S,i,b_i)\),\((i,T,w_i)\)。怎么处理“奇怪的方格”?连\((i,i^\prime,p_i)\)和\((i^\prime,j,+\infty)\)。表示如果\(i\)归属于\(S\)(染黑色),那么就只能忍受奇怪所带来的\(p_i\)......
  • [刷题笔记] CF1132F Clear the String & [CQOI2007] 涂色
    Problem1Problem2双倍经验qwqDescription初始时数组为空,每次可以选择一个区间\(l-r\)将其赋为同一个值,赋的值可以覆盖,给定数组的目标形式,求至少经过多少次操作使得空数组变成目标形式。Solution我们发现每次选择一个区间,大区间包含小区间,小区间可以推到大区间。因此考虑区间......
  • 「解题报告」P3703 [SDOI2017]树点涂色
    有趣题,代码超好写,而且思路超有趣!!!首先发现操作1的操作都是某个点到根,不难发现这样每种颜色一定对应着树上的一条链。那么操作2可以直接树上查分求答案,这样我们只需要考虑维护每个点到根的链的数量了。怎么维护链的数量?发现这个操作1长得和LCT的Access操作一模一样啊,所......
  • 得到 K 个黑块的最少涂色次数
    给你一个长度为n 下标从0 开始的字符串 blocks ,blocks[i] 要么是 'W' 要么是 'B' ,表示第 i 块的颜色。字符 'W'和 'B' 分别表示白色和黑色。给你一个整数 k ,表示想要 连续 黑色块的数目。每一次操作中,你可以选择一个白色块将它涂成 黑色块。请你返回至......
  • 区间涂色问题
    一眼区间dp设dp[i][j]为涂完i到j所需的最小次数当a[i]==a[j]时,dp[i][j]=min(dp[i+1][j-1]+1,min(dp[i+1][j],dp[i][j-1]));为什么是dp[i+1][j-1]+1,此时会产生一个异想天开的想法,就是取遍历一遍i+1到j-1这一段字符串,看是否有a[i]字符的出现,如果出现的话dp[i][j]=dp[i+1][j......
  • P1283 平板涂色
    题目传送门一看数据,是可以爆搜的。思路我们看,当要涂一个矩形的时候,他上面的矩形就都要涂掉于是我们就可以自然而然的想到拓扑或者说我们把整个平板抽象成一个有向图,每个矩形就是一个点,他的限制就是边比如样例:就可以抽象成建图就可以暴力建,才100*100的数据然后就在图上......
  • 2379. 得到 K 个黑块的最少涂色次数
    题目链接:2379.得到K个黑块的最少涂色次数方法一:前缀和解题思路通过前缀和计算任意子区间\([i,i+k-1]\)中字母\(W\)的数量,\(ans=min([i,i+k-1].count('W'),i=0,1,...)。\)代码classSolution{public:intminimumRecolors(stringblocks,intk......
  • 力扣简2379 得到第k个黑块的最少涂色次数
    20230310每日一题滑动窗口题 classSolution{publicintminimumRecolors(Stringblocks,intk){intres=Integer.MAX_VALUE,len=blocks.length();......
  • 2379. 得到 K 个黑块的最少涂色次数
    给你一个长度为n 下标从0 开始的字符串 blocks ,blocks[i] 要么是 'W' 要么是 'B' ,表示第 i 块的颜色。字符 'W'和 'B' 分别表示白色和黑色。给你一个整......
  • 力扣---2379. 得到 K 个黑块的最少涂色次数
    给你一个长度为n下标从0开始的字符串blocks,blocks[i]要么是'W'要么是'B',表示第i块的颜色。字符'W'和'B'分别表示白色和黑色。给你一个整数k,表示想要连......