题目

将柱子的高度离散化$\DeclareMathOperator{\dp}{dp}$

设第 $i$ 根柱子实际高度是 $h_i$,离散化之后的高度是 $g_i$;第 $i$ 高的高度是 $H_i$,第 $i$ 段的长度为 $c_i$,即 $c_0 = H_0,c_i = H_i - H_{i-1} \quad i \ge 1$

设有三根柱子,高度分别为 $1, 4, 3$,则 $h = [1, 4, 3]$,$g = [0, 2, 1]$,$ H = [1, 3, 4]$,$c = [1, 2, 1]$ 。

$\dp[i][j]$ 表示第 $i$ 根柱子上「上下相邻的两块同色」最早出现在第 $j$ 段的方案数。

第 $i$ 根柱子上未出现相邻两块同色的情况用状态 $\dp[i][g_i+1]$ 表示

转移方程

$\dp[i][j]$

  1. $g_{i-1} \ge j$:$\dp[i][j] = \dp[i-1][j] \times 2^{\max(0, h_i - h_{i-1})}$
  2. $g_{i-1} < j$:$\dp[i][j] = \dp[i-1][g_{i-1} + 1] \times 2 \times (2^{c_j} -1) \times 2^{h_{i} - H_{j}}$

边界条件

$\dp[0][0] = (2^{c_0} - 2) \times 2^{h_0 - H_0}$

$\dp[0][j] = 2 \times (2^{c_j} - 1) \times 2^{h_0 - H_j} \quad 1 \le j \le g_0$

$\dp[0][g_0 + 1] = 2$

$\dp[i][g_i + 1]$

  1. $g_{i-1} \le g_i$:$\dp[i][g_i+1] = 2 \times \dp[i-1][g_{i-1} + 1]$
  2. $g_{i-1} > g_i$:$\dp[i][g_i + 1] = 2 \times \sum_{ g_i < j \le g_{i-1} + 1} \dp[i-1][j]$

AGC 26 D Histogram Coloring的更多相关文章

  1. Solution -「AGC 026D」Histogram Coloring

    \(\mathcal{Description}\)   Link.   有 \(n\) 列下底对齐的方格纸排成一行,第 \(i\) 列有 \(h_i\) 个方格.将每个方格染成黑色或白色,求使得任意完 ...

  2. AGC 025 B - RGB Coloring

    B - RGB Coloring Time limit : 2sec / Memory limit : 1024MB Score : 700 points Problem Statement Taka ...

  3. AtCoder Grand Contest 026 D - Histogram Coloring

    一列中有两个连续的元素,那么下一列只能选择选择正好相反的填色方案(因为连续的地方填色方案已经确定,其他地方也就确定了) 我们现将高度进行离散化到Has数组中,然后定义dp数组 dp[i][j] 表示前 ...

  4. AGC026D Histogram Coloring

    link 题意: 给定n列的方块,第i列高度$h_i$.现在要把它染成红蓝两色,要求满足:对于任意一个$2\times 2$的区域,恰有2个蓝色,2个红色.问方案数. $n\leq 100,h_i\l ...

  5. AGC 026 C - String Coloring

    题面在这里! 比较简单的折半搜索,推一下hash函数,要求正反最后相等就行了. #include<bits/stdc++.h> #define ll unsigned long long ...

  6. AGC 26 F Manju Game

    $\DeclareMathOperator{\sw}{sw}$ $\DeclareMathOperator{\sb}{sb}$ $\DeclareMathOperator{\dp}{dp}$ 用 $\ ...

  7. 【AtCoder】AGC026 题解

    A - Colorful Slimes 2 找相同颜色的一段,然后答案加上段长除2下取整 代码 #include <iostream> #include <cstdio> us ...

  8. DP 题集 2

    关于 DP 的一些题目 String painter 先区间 DP,\(dp[l][r]\) 表示把一个空串涂成 \(t[l,r]\) 这个子串的最小花费.再考虑 \(s\) 字符串,\(f[i]\) ...

  9. 5.2 CUDA Histogram直方图

    什么是Histogramming Histogramming是一种从大的数据集中提取典型特征和模式的方式. 在统计学中,直方图(英语:Histogram)是一种对数据分布情况的图形表示,是一种二维统计 ...

随机推荐

  1. 运维自动化之Cobbler系统安装详解

    原文链接 参考文档 参考文档SA们现在都知道运维自动化的重要性,尤其是对于在服务器数量按几百台.几千台增加的公司而言,单单是装系统,如果不通过自动化来完成,根本是不可想象的. 运维自动化安装方面,早期 ...

  2. JDBC 基本语法总结

    实现JDBC操作: 静态SQL执行 ① 注册驱动 Class.forName("com.mysql.jdbc.Driver"); ② 创建连接 Connection con = D ...

  3. KVM修改虚机网卡模式:由NAT模式改为Bridge模式

    1)关闭虚机# virsh  shutdown  vm1 2)编辑虚机配置文件# virsh  edit  vm1 <interface type='default'> 改为<int ...

  4. 二、MySQL 管理

    MySQL 管理 启动及关闭 MySQL 服务器 Windows 系统下 在 Windows 系统下,打开命令窗口(cmd),进入 MySQL 安装目录的 bin 目录. 启动: cd c:/mysq ...

  5. 五 python并发编程之IO模型

    一 IO模型介绍 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问 ...

  6. Ubuntu12.04下YouCompleteMe安装教程(部分)

    1.通过源码编译安装VIM 开发中使用的是Ubuntu 12.04 LTS,通过sudo apt-get install vim安装的版本较低,不支持YCM,所以,用源码编译并安装最新的Vim. 卸载 ...

  7. 网络编程协议(TCP和UDP协议,粘包问题)以及socketserver模块

    网络编程协议 1.osi七层模型 应用层  表示层  会话层  传输层  网络层  数据链路层  物理层 2.套接字 socket 有两类,一种基于文件类型,一种基于网络类型 3.Tcp和udp协议 ...

  8. 自动化运维之使用Python3收发电子邮件~~~附源码

    一.背景介绍   1.1  一些专业名称的解释 MUA——Mail User Agent,邮件用户代理.是用户与电子邮件系统的交互接口,一般来说它就是我们PC机上的一个程序,提供一个好的用户界面,它提 ...

  9. 笔记-爬虫-robots.txt

    笔记-爬虫-robots.txt 1.      robots.txt文件简介 1.1.    是什么 robots.txt是用来告诉搜索引擎网站上哪些内容可以被访问.哪些不能被访问.当搜索引擎访问一 ...

  10. Python 交互模式中 Delete/Backspace 键乱码问题

    进入 Python 交互模式,按下 Delete/Backspace 键,会出现 ^H 字符 解决方式: 1. 进到 Python 的Modules目录 [root@cyt-test Python-2 ...