首页 > 其他分享 >轮廓线 dp

轮廓线 dp

时间:2024-03-22 18:34:51浏览次数:12  
标签:格子 texttt dp 轮廓线 转移 空闲

轮廓线 dp 是一种和插头 dp 基本相同的东西,所以先看一下轮廓线 dp。

Tiling Dominoes

与状压 dp 不同的是,轮廓线 dp 是通过逐格转移来进行 dp 的。我们用三维 \(f_{i, j, k}\) 来表示 dp 状态。其中,\(i,j\) 表示当前进行到 \((i,j)\) 这个格子,\(k\) 表示轮廓线状态。具体的,在下面的情况中,\(k = \texttt{(11001001)}_2\)。

回到题目。

  • 当这个格子被覆盖了,也就是 \(k\) 的第 \(j\) 位为 \(\texttt{1}\) 时,我们不能在格子上放任何多米诺骨牌。\(k\) 的第 \(j\) 位变成 \(\texttt{0}\)。
  • 当这个格子没有被覆盖,也就是 \(k\) 的第 \(j\) 位为 \(\texttt{0}\):
    • 我们可以竖着放。\(k\) 的第 \(j\) 位变成 \(\texttt{1}\)。
    • 当 \(k\) 的第 \(j - 1\) 位之前选择的是竖着放的时候,说明本来 \(j - 1\) 是空闲的。我们可以把这个多米诺骨牌横过来。\(k\) 的第 \(j - 1\) 位变成 \(\texttt{0}\)。
    • 这里我们没有暂时空闲的情况,因为暂时空闲给下一个格子放横的骨牌的情况已经被处理过了。

​ 时间复杂度 \(\mathcal{O}(nm2^m)\)。这里转移是 \(\mathcal{O}(1)\) 的,这也是轮廓线 dp 的优势。

Guards In The Storehouse

这道题难点主要在于 dp 状态的设计和繁琐的转移。转移不多叙述。

设 \(f_{i, j, k, x, y}\) 表示当前在 \((i, j)\) 格子,当前 \(m\) 列每一列是否被占用的状态为 \(k\),这一行有没有被占用的布尔值为 \(x\),空一格的机会是否被使用的布尔值为 \(y\)。

标签:格子,texttt,dp,轮廓线,转移,空闲
From: https://www.cnblogs.com/yh2021shx/p/18090236

相关文章

  • http tcp udp json 接收测试
    创建新的Node.js项目:在您的项目文件夹中打开命令行或终端,并运行以下命令来初始化一个新的Node.js项目:npminit-y安装依赖库:执行以下命令来安装 dgram 模块,它是Node.js提供的用于处理UDP数据的模块:npminstalldgram启动UDP服务器:在命令行或终端中,进入项目文......
  • QT 智能指针 QPointer QScopedPointer QSharedPointer QWeakPointer QSharedDataPoint
    QPointerQPointer是一种受保护的指针,当其引用的对象被销毁时,它会被自动清除(但是,销毁引用对象还是必须手动delete)。QPointer所指向的对象必须是QObject或其派生类对象。当多个指针指向同一个Object对象时,引用的对象可能被释放掉,这时使用QPointer就可以安全的测试引用对象是......
  • 反外挂 DDos UDP 攻击只需客户端 开着游戏客户端
    #include<WINSOCK2.H>#include<iostream>#include<string>usingnamespacestd;#include<stdlib.h>#defineBUF_SIZE1377#pragmacomment(lib,"WS2_32.lib")intmain(){WSADATAwsd;SOCKETsHost;SOCKADDR_INse......
  • Excutors 与 ThreadPoolExcutor 的关系与区别
    先说结论。线程池的创建分为两种:ExecutorsThreadPoolExecutorExecutors是一个线程池的工具类,而ThreadPoolExecutor是Executors的具体实现。ThreadPoolExecutor是Executor接口的一个实现,是线程池的核心类。Executors工具类提供了很多方法来创建不同类型的线程池,比如......
  • windows通过命令行修改RDP端口的方法
    在Windows系统中,通过命令行修改RDP端口,可以使用以下步骤:打开命令提示符窗口。你可以使用WIN+R快捷键打开“运行”对话框,输入“cmd”并按Enter键。输入以下命令并按Enter键来修改RDP端口:进入cmd regadd"HKLM\SYSTEM\CurrentControlSet\Control\TerminalServer\WinSt......
  • Linux hdparm命令教程:优化硬盘性能和读写速度(附实例详解和注意事项)
    Linuxhdparm命令介绍hdparm是一个用于控制和配置硬盘驱动器的命令行工具。它允许您查看和修改硬盘的参数,包括缓存设置、高级电源管理、硬盘性能等。通过hdparm,您可以优化硬盘的读写速度和性能。Linuxhdparm命令适用的Linux版本hdparm在大多数Linux发行版中都可用,......
  • fastendpoint+maomi的一种实现原理
    1整个框架就是fastendpoint(api处理,鉴权授权,参数校验,对象映射等基础功能集成),maoni(Service注入,依赖关系处理,参考的是abp,比较轻量级,源码我放在附件里了,实现模块化注入)fastendpoint:https://fast-endpoints.com/maomi: https://maomi.whuanle.cn/1.module.html2项目截图:......
  • TCP和UDP
    传输控制协议(TCP)面向连接可靠传输流控及窗口机制使用TCP的应用WEB浏览器电子邮件文件传输程序 用户数据报协议(UDP)面向无连接不可靠传输尽力而为的传输使用UDP的应用域名系统(DNS)视频应用IP语音(VoIP)Tcp报文格式源端口(16)目的端口(16)  序列号(32)......
  • MATLAB强化学习使用全解析+附代码(以DDPG PPO为例)
    Content建立动作和观测的数据结构创建环境根据观测、动作、环境step和reset函数创建环境测试环境是否符合要求网络创建Critic网络设置Critic网络训练参数Actor网络设置Actor网络训练参数创建智能体设置训练参数开始训练MATLAB强化学习step函数......
  • 网络通信——IP地址、端口号、协议(TCP、UDP)
    通信架构网络通信三要素IP地址IPv4地址 IPv6地址IP域名  IP常识 端口号概念协议 开放式网络互联标准:OSI、TCP/IP 传输层的2个通信协议——UDP、TCPTCP协议:三次握手建立建立可靠连接  进行三次握手的原因:为了确保客户端和服务端接收/发送消息都没有......