状态压缩DP
2014-03-23 14:30
169 查看
题目
POJ 棋盘问题
POJ 炮兵阵地
POJ Painting a Board
POJ Relocation
思路
1. 状态压缩题目数据量在某一维度会比较小, 当看到二维数组的某一行或某一列比较短时, 就应该想到状态压缩. 一般来讲, 用 PUSH 操作更多
2. 第一题 棋盘问题. 每一行每一列只能放一个棋子. dp[i][state] 表示前 i 行放棋子后得到的状态为 state 时的方案数. dp[i][state] = sum(dp[i-1][oldstate])
3. 第二题 炮兵阵地. 每一行能够安放的炮台数是一定的. 一门大炮的攻击范围为 2, 所以状态需要记录前两行的. dp[i][s1][s2] 表示第 i 行安防炮台在 s1 处第 i-1 行安放炮台在 s2 处 时的总炮台数
dp[i][s1][s2] = funct(dp[i-1][s2][s3]) 其中 s1 和 s3 不能有交集
4. 第三题 涂色问题. N 不大于 15, 明显就是个状态压缩题. 状态 state 表示第 i 个方块有没有被涂色, 共有 (1<<15) 中可能性.
dp[state][i] 表示给第 i 个方块涂色后, 状态为 state 时的最小拿笔数
dp[newState][i] = min(dp[oldState][j] + 1) if color[j] != color[i]
= min(dp[oldState][j] ) if color[j] == color[i]
PUSH 更新, 合情合理
5. 第四题 搬家问题. 先计算所有的状态中能被两辆车一次搬走的集合. 对这些集合进行 01 背包
dp[i][state] 表示状态集中的前 i 个状态到达 state 时需要搬几次
dp[i][state] = dp[i-1][oldstate] + 1 其中 oldstate = state-state[i] (PULL 更新, 减法不易实现)
dp[i][s[i]|state] = dp[state] + 1
空间可以降低到一维
POJ 棋盘问题
POJ 炮兵阵地
POJ Painting a Board
POJ Relocation
思路
1. 状态压缩题目数据量在某一维度会比较小, 当看到二维数组的某一行或某一列比较短时, 就应该想到状态压缩. 一般来讲, 用 PUSH 操作更多
2. 第一题 棋盘问题. 每一行每一列只能放一个棋子. dp[i][state] 表示前 i 行放棋子后得到的状态为 state 时的方案数. dp[i][state] = sum(dp[i-1][oldstate])
3. 第二题 炮兵阵地. 每一行能够安放的炮台数是一定的. 一门大炮的攻击范围为 2, 所以状态需要记录前两行的. dp[i][s1][s2] 表示第 i 行安防炮台在 s1 处第 i-1 行安放炮台在 s2 处 时的总炮台数
dp[i][s1][s2] = funct(dp[i-1][s2][s3]) 其中 s1 和 s3 不能有交集
4. 第三题 涂色问题. N 不大于 15, 明显就是个状态压缩题. 状态 state 表示第 i 个方块有没有被涂色, 共有 (1<<15) 中可能性.
dp[state][i] 表示给第 i 个方块涂色后, 状态为 state 时的最小拿笔数
dp[newState][i] = min(dp[oldState][j] + 1) if color[j] != color[i]
= min(dp[oldState][j] ) if color[j] == color[i]
PUSH 更新, 合情合理
5. 第四题 搬家问题. 先计算所有的状态中能被两辆车一次搬走的集合. 对这些集合进行 01 背包
dp[i][state] 表示状态集中的前 i 个状态到达 state 时需要搬几次
dp[i][state] = dp[i-1][oldstate] + 1 其中 oldstate = state-state[i] (PULL 更新, 减法不易实现)
dp[i][s[i]|state] = dp[state] + 1
空间可以降低到一维
相关文章推荐
- 树形DP
- 天气应用工事中
- 背包问题及其变形
- YII千万级PV架构经验分享--理论篇
- 黑马程序员-OC语言基础学习(五)
- vba窗口中显示右键
- VxWorks 常见问题
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- linux grep
- 独立成分分析 与 功能连接之间的关联尝试 by 张高燕
- Leetcode_rotate-list
- java的小程序!
- C++等级考试第一套题遇到的问题
- Struts2与webx的比较
- mysql 忘记密码或修改密码
- BlockingDeque
- 没变强是因为你太舒服(图)
- String对象及特点
- Linux Shell 脚本学习,read、if、test、until记录
- 用php自带函数去除html标记