状压dp学习记

by scmmm

开始日期

2019/7/17

前言

状压dp感觉很好理解(本质接近于爆搜但是又有广搜的感觉),综合了dp的高效性(至少比dfs,bfs优),又能解决普通dp难搞定的问题(例如旅行商问题),又能体验到空间利用的高效性。

Level 1.模板题

[洛谷] P1896 [SCOI2005]互不侵犯

state 指的是每一行的状态

king 指的是这种情况下国王的个数

难度★★,很好的一个入门题,dp部分:

	for(i=1;i<=p;i++)
{
if(king[i]<=m) f[1][i][king[i]]=1;
}
for(i=2;i<=n;i++)
for(j=1;j<=p;j++)
for(k=1;k<=p;k++)
{
if(state[j]&state[k]) continue;
if((state[j]<<1)&state[k]) continue;
if((state[j]>>1)&state[k]) continue;
for(l=1;l<=m;l++)
{
if(king[k]+l>m) continue;
f[i][k][king[k]+l]+=f[i-1][j][l];
}
} }

Level2. P2704 [NOI2001]炮兵阵地

一道考察空间利用的好题,优化方案两个:

1.预处理好每行存在的方案(最大60个),然后f[110,65,65]不会爆空间

2.使用滚动数组,第一行位置1,第二行2,第三行0 结论 第i行为(i+3)%3 (+3是为了防止之后f[i-1]时出现负数)

对于1.特别注意当前状态是state[i,j]而非j(我在这里被卡了好久)

难度★★★,对暴力和预处理有个更好的认识,dp部分:

for(i=1;i<=p[1];i++)
for(j=1;j<=p[2];j++)
{
if(state[1][i]&state[2][j]) continue;
int u=state[2][j],looker=0;
while(u) looker+=u%2,u=u>>1;
f[2][i][j]=max(f[2][i][j],f[1][0][i]+looker);
}
for(i=3;i<=n;i++)
{
for(j=1;j<=p[i];j++)
for(l=1;l<=p[i-1];l++)
{
if(state[i-1][l]&state[i][j]) continue;
for(k=1;k<=p[i-2];k++)
{
if(state[i-1][l]&state[i-2][k]) continue;
if(state[i][j]&state[i-2][k]) continue;
int u=state[i][j],looker=0;
while(u) looker+=u%2,u=u>>1;
f[i][l][j]=max(f[i-1][k][l]+looker,f[i][l][j]);
}
}
}

MMM 状压dp学习记的更多相关文章

  1. 状压dp学习笔记(紫例题集)

    P3451旅游景点 Tourist Attractions 这个代码其实不算是正规题解的(因为我蒟蒻)是在我们的hzoj上内存限制324MIB情况下过掉的,而且经过研究感觉不太能用滚动数组,所以那这个 ...

  2. 状压DP学习笔记

    有的时候,我们会发现一些问题的状态很难直接用几个数表示,这个时候我们就会用到状压dp啦~~. 状压就是状态压缩,就是讲原本复杂难以描述的状态用一个数或者几个数来表示qwq.状态压缩是一个很常用的技巧, ...

  3. MMM 数位dp学习记

    数位dp学习记 by scmmm 开始日期 2019/7/17 前言 状压dp感觉很好理解(本质接近于爆搜但是又有广搜的感觉),综合了dp的高效性(至少比dfs,bfs优),又能解决普通dp难搞定的问 ...

  4. 状压dp(状态压缩&&dp结合)学习笔记(持续更新)

    嗯,作为一只蒟蒻,今天再次学习了状压dp(学习借鉴的博客) 但是,依旧懵逼·································· 这篇学习笔记是我个人对于状压dp的理解,如果有什么不对的 ...

  5. [学习笔记]状压dp

    状压 \(dp\) 1.[SDOI2009]Bill的挑战 \(f[i][j]\) 表示匹配到字符串的第 \(i\) 位状态为 \(j\) 的方案数 那么方程就很明显了,每次枚举第 \(i\) 位的字 ...

  6. ZOJ3802 Easy 2048 Again (状压DP)

    ZOJ Monthly, August 2014 E题 ZOJ月赛 2014年8月 E题 http://acm.zju.edu.cn/onlinejudge/showProblem.do?proble ...

  7. CF453B Little Pony and Harmony Chest (状压DP)

    CF453B CF454D Codeforces Round #259 (Div. 2) D Codeforces Round #259 (Div. 1) B D. Little Pony and H ...

  8. POJ 1185 炮兵阵地(状压DP)

    炮兵阵地 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 26426   Accepted: 10185 Descriptio ...

  9. POJ 1321 棋盘问题(DFS & 状压DP)

    用DFS写当然很简单了,8!的复杂度,16MS搞定. 在Discuss里看到有同学用状态压缩DP来写,就学习了一下,果然很精妙呀. 状态转移分两种,当前行不加棋子,和加棋子.dp[i][j]中,i代表 ...

随机推荐

  1. 图像滤镜艺术---PS图像转手绘特效实现方案

    原文:图像滤镜艺术---PS图像转手绘特效实现方案 手绘效果实现方案 本文介绍一种PS手绘效果的实现方案,PS步骤来自网络,本文介绍代码实现过程. 整体看来,虽然效果还是有很大差异,但是已经有了这种特 ...

  2. 1. linux系统简介

    一.Linux是什么 linux位于系统调用和内核的那两层,直观上来看,我们使用的操作系统还包含一些在其上运行的应用程序,包含文本编译器,浏览器,电子邮件. 二.Linux与windows的区别 1. ...

  3. C#高性能大容量SOCKET并发(十):SocketAsyncEventArgs线程模型

    原文:C#高性能大容量SOCKET并发(十):SocketAsyncEventArgs线程模型 线程模型 SocketAsyncEventArgs编程模式不支持设置同时工作线程个数,使用的NET的IO ...

  4. C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装

    原文:C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装 1.SocketAsyncEventArgs介绍 SocketAsyncEventArgs是微软提供的高性能 ...

  5. xgboost参数及调参

    常规参数General Parameters booster[default=gbtree]:选择基分类器,可以是:gbtree,gblinear或者dart.gbtree和draf基于树模型,而gb ...

  6. Ruby已经慢慢走向衰退了,那些年代久远而且小众的语言没有翻身的可能性

    Ruby已经慢慢走向衰退了,现在WEB开发里,NODE.JS+前端各种框架是主流,PHP.ruby.Asp.net.python等语言在网站编程方面只会越来越少.数据领域方面,机器学习和人工智能中,p ...

  7. C# 遍历窗体控件顺序问题

    今天在做C# winform 窗体控件遍历时遇到控件顺序的问题,也就是控件被遍历的先后问题.实际情况如下所述. 窗体界面如下: 界面构成是:主界面有一个 Panel (Panel_14),Panel_ ...

  8. TApplicationEvents的前世今生(待续)

    这是它的声明,它的数据成员全部都是Event,而没有真正意义上的数据(如此一来,几乎可以猜测,它本身什么都做不了): TCustomApplicationEvents = class(TCompone ...

  9. RtlAdjustPrivilege进程提权,权限ID对照表

    SeCreateTokenPrivilege            0x2 SeAssignPrimaryTokenPrivilege     0x3 SeLockMemoryPrivilege    ...

  10. jqGrid使用经验分享(一)——jqGrid简单使用、json格式和jsonReader介绍

    广大的读者朋友们大家好,很高兴又可以在博客中和大家分享我的开发经验了. 此次,我准备向大家介绍一个非常好用的jQuery表格插件——jqGrid. 如果您在实际项目中遇到web端表格展示功能的需求,又 ...