首页 > 其他分享 >区间涂色问题

区间涂色问题

时间:2023-04-29 23:56:24浏览次数:32  
标签:min int 问题 55 涂色 区间 dp

  • 一眼区间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-1],就是上来先把i到j这一段全涂成a[i],然后去涂其他的,但这种做法不能保证在dp[i+1][j-1]-1的次数内正确涂满其余没涂的,例如,ABABA,dp[2][4] = 3,如果按照以上方法更新,dp[1][5] = 3,实际上dp[1][5] = 4。再来看dp[i][j-1]与dp[i+1][j],在涂a[i]或a[j]时直接把i-j涂完,不会像前面一样影响答案。
  • 当a[i]!=a[j]时,拆分区间就好
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n;
char a[55];
int dp[55][55];
int main(){
    string s;
    cin>>s; n = s.length();
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=n;j++) {
            dp[i][j] = 51;
        }
    }
    for(int i = 1;i<=s.length();i++){
        a[i] = s[i-1];dp[i][i] = 1;
    }

    for (int i = 1; i  <= n-1; i++) {
		if(a[i]!=a[i+1]) dp[i][i+1] = 2;
        else dp[i][i+1] = 1;
    }
    
    for (int len = 3; len <= n; len++) {
			for (int i = 1; i + len - 1 <= n; i++) {
				int j = i + len - 1;
                if(a[i]==a[j]){
                    dp[i][j] = min(dp[i+1][j-1]+1,min(dp[i+1][j],dp[i][j-1]));
                }
                else{
                    
                    for(int k = i;k<=j-1;k++){
                     //   if(i==1&&j==3){
                   //         cout<<dp[i][k]<<" "<<dp[k+1][j]<<" "<<dp[i][j]<<endl;
                    //    }
                        dp[i][j] = min(dp[i][k]+dp[k+1][j],dp[i][j]);
                    }
                }
			}
		}
    cout<<dp[1][n];
}

标签:min,int,问题,55,涂色,区间,dp
From: https://www.cnblogs.com/wujw11world/p/17364725.html

相关文章

  • 常见dp问题
    dp的引入动态规划(简称dp),是指把一个问题分解为若干个子问题,通过局部最优解得到全局最优的一种算法策略或者说一种思想方法.简单来讲,就是用一个数组表示我们要求的问题的答案,如果知道前一个问题的答案,就可以推出后一个问题的答案dp有以下几个常见的概念:状态:......
  • 2023.17 6个问题让chatgpt帮你搞懂新行业
    1、介绍一下麦肯锡通过搞懂一个行业100个关键词来快速了解这个行业的方法。2、根据各项调查、行业报告、新闻、研究论文帮忙整理某个行业的100个关键词,并根据关联性强弱分类。3、用一句话来定义或概述上述100个关键词。4、行业中领先的前10位公司是哪些?5、哪些因素会阻碍行业的进......
  • 想要硬件设备更快,你需要了解这些性能问题!
    1前言完整的性能分析案例的第一部分,打开首页接口做压力场景,分析性能问题。将看到各种基础硬件设施层面的性能问题,如由虚机超分导致的性能问题、CPU运行模式下的性能问题、IO高、硬件资源耗尽但TPS很低的问题等。如你从零开始做一个完整项目,这些问题很可能是你首先要面对的。把它们......
  • 背包问题
    背包问题是一种组合优化的NP完全问题.问题可以描述为:给定一组物品,每种物品都有自己的体积和价值,在限定的总体积内,我们如何选择,才能使得物品的总价值最高.背包九讲①01背包问题有N件物品和一个容量是V的背包,每件物品只能使用一次第i件物品的体积是vi......
  • z_auto_align G34 probing failed 问题及解决
    目前状况bltouch正常调平检测正常z轴自动对齐,显示probingfailed 原因:刷入新固件后,没有在printer上恢复设置(restoresetting),导致的probeoffset错误 解决方案:多种情况都可能导致该错误,此处仅为其中一种,以作补充刷入固件后检查以下probe......
  • 问题解决:Component name "xxx" should always be multi-word vue/multi-word-compone
    如题,原因是单个单词命名时语法检测无法通过,可以在导出组件时通过name属性给组件名加一个后缀,比如Component。<script>exportdefault{//当组件名为一个单词时,语法检查是无法通过的,可以设置name的值为2个单词来规避检查。name:'HomeComponent'}<......
  • IdentityServer4 问题解决
    RedirectUris={"https://localhost:7098/signin-oidc"},PostLogoutRedirectUris={"https://localhost:7098/signout-callback-oidc"},服务端添加这个 RequirePkce=false,添加这一句......
  • thymeleaf学习问题整理
    使用配置<properties><java.version>1.8</java.version><thymeleaf.version>3.0.9.RELEASE</thymeleaf.version><thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version></p......
  • 06 - react的类组件中的状态state render函数 this指向问题 事件绑定
    //注册事件importReactDomfrom"react-dom"import{Component}from"react"//类组件中的状态通过this.state.xxx来获取状态classHelloextendsComponent{//事件对象eventhandleClick(e){console.log(this)//udnefiend使用箭头函数解决this......
  • open3d Reconstruction system 问题解决
    1.https://github.com/luckyluckydadada/Azure-Kinect-DK-3D-reconstruction 2.open3d版本:0.14.10.16.00.17.0会报错:open3d.cuda.pybind.piplines.odommetry.OdomtryOptionbojecthasnoattribute'max_depth_diff' 3.结果问题一:    根据......