首页 > 其他分享 >C - Modern Art 3 G

C - Modern Art 3 G

时间:2023-08-09 20:00:13浏览次数:32  
标签:Art int Modern MaxN 区间 颜色 分割线 dp

C - Modern Art 3 G

题意

有一种画法:每次可以填一段区间,把一段区间填成相同的颜色,给你成品,问最少填了多少次。

思路

区间 dp,对于一段区间,显然会有一条分割线,把画作分成两边,如果没有,那就没意义了,考虑 DFS,对于一个区间,枚举分割线,我们发现必然能够找到一条分割线使得被截断的颜色的条数 \(\le 1\),因为设区间 \([l, r]\) 那么我们知道 \(l, r\) 是这个区间的最左边和最右边,假设说找不到,那么必然有一条不是 \([l, r]\) 的一条颜色能够覆盖 \([l, r]\), 那么区间就不应该是 \([l, r]\),假设不成立,那么就只要考虑被截断的颜色条即可,那么我们可以得知这种颜色条必然是会覆盖 \([l, r]\) 之一的,所以只要判断 \(l, r\) 的颜色是否一样,如果一样就会被截断,否则就肯定有一条分割线可以不切断任意一条颜色条来分割两边,所以只要在统计答案是考虑一下这种情况即可,随后改 dp。

code

点击查看代码
#include <iostream>

using namespace std;

const int MaxN = 310;

int dp[MaxN][MaxN], a[MaxN], n;

int main() {
  ios::sync_with_stdio(0), cin.tie(0);
  cin >> n;
  for (int i = 1, x; i <= n; i++) {
    cin >> a[i], dp[i][i] = 1;
  }
  for (int len = 2; len <= n; len++) {
    for (int i = 1, j = i + len - 1; j <= n; i++, j++) {
      dp[i][j] = 1e9;
      for (int k = i; k < j; k++) {
        dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] - (a[i] == a[j]));
      }
    }
  }
  cout << dp[1][n] << endl;
  return 0;
}


标签:Art,int,Modern,MaxN,区间,颜色,分割线,dp
From: https://www.cnblogs.com/ybtarr/p/17617861.html

相关文章

  • 关于串口USART使用时相关注意事项
    1、关于串口波特率的计算波特率计算公式如下:TX/RX波特率=FCLK/(16*USARTDIV)USARTDIV=DIV_Mantissa+(DIVFraction/16)以USART1波特率115200为例,FCLK为72M,则USARTDIV值为39.0625,即39.0625=DIV_Mantissa+(DIVFraction/16)其中,DIV_Mantissa表示整数部分,为36,DIVFraction/16表示小......
  • 硬盘SMART检测参数详解[转]
    一、SMART概述      要说Linux用户最不愿意看到的事情,莫过于在毫无警告的情况下发现硬盘崩溃了。诸如RAID的备份和存储技术可以在任何时候帮用户恢复数据,但为预防硬件崩溃造成数据丢失所花费的代价却是相当可观的,特别是在用户从来没有提前考虑过在这些情况下的应对措施时......
  • 界面控件DevExpress WPF Chart组件——拥有超快的数据可视化库!
    DevExpressWPF Chart组件拥有超大的可视化数据集,并提供交互式仪表板与高性能WPF图表库。DevExpressCharts提供了全面的2D/3D图形集合,包括数十个UI定制和数据分析/数据挖掘选项。PS:DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。......
  • Part1--软件规范总纲
    开发人员规范软件代码编写规范套话目的:统一公司编码风格;提高代码易读性、可靠性和稳定性;减少软件维护成本提高生产力基本原则:维持代码易读、可维护;保持代码清晰;尽可能复用代码实用规则缩进新增文件缩进4空格;平台文件中新增函数、结构体、枚举类型4空格缩进;已经有的......
  • 分区函数Partition By的用法
    原文地址:https://blog.csdn.net/locken123/article/details/127411319前言:partitionby关键字是分析性函数的一部分,它和聚合函数(如groupby)不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录。partitionby用于给结果集分组,如果没有指定那么它......
  • [代码随想录]Day12-二叉树part01
    今天的题目就是二叉树的前中后序遍历,目前只写了递归方法,之后再补迭代方法。题目:144.二叉树的前序遍历思路:前序遍历:根-左-右代码1:递归,递归情况下只需要改变递归的顺序即可实现前中后序遍历。/***Definitionforabinarytreenode.*typeTreeNodestruct{*Va......
  • springbatch remote partition
    SpringBatch远程分区demo*使用框架版本<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.han</groupId> <......
  • echart 实现添加警戒线
    代码:option={xAxis:{type:'category',data:['Mon','Tue','Wed','Thu','Fri','Sat','Sun']},yAxis:{type:'value',},series:[......
  • new Thread().start(); - 多线程练习
     用Java创建一个线程是这样的:Threadthread=newThread();要启动Java线程,您将调用其start()方法,如下所示:   thread.start();此示例未指定要执行的线程的任何代码。线程启动后会立即再次停止。所以要往线程里写入代码。Threadthread=newThread(){@Override......
  • Hexagon之Smart P&ID学习
    1SmartP&ID介绍IntergraphSmartP&ID软件是海克斯康SmartPlant®Enterprise(以下简称“SPE”)体系软件之一,用于SmartPlantFoundation工作组中,是一款以数据库为核心、以规则驱动的智能工艺及仪表流程图设计软件,能够生成各种报表。其智能性主要体现在对PID图形(智能管道仪表图)......