状态压缩DP真心不会写,参考了别人的写法。

先预处理出合理状态,

我们用二进制表示可以放棋子的状态,DP[I][J][K]:表示现在处理到第I行,J:表示第I行的状态,K表示现在为止一共放的棋子数量。

#include<stdio.h>
#include<iostream>
#define N 1111
using namespace std;
typedef long long ll;int num,n,m;
ll dp[11][1<<11][90];
int hh[N],hnum[N];
int mp[1111][1111];int check(int x,int y)
{if (x&(y<<1)) return 0;if (x&(y>>1)) return 0;if (x&y) return 0;return 1;
}int judge(int x)
{if (x&(x<<1)) return 0;if (x&(x>>1)) return 0;return 1;
}int getsum(int x)
{int ans=0;while (x){if (x&1) ans++;x>>=1;}return ans;
}void pre()
{num=0;for (int i=0;i<(1<<n);i++)if (judge(i)){hh[++num]=i;hnum[num]=getsum(i);}for (int i=1;i<=num;i++)for (int j=1;j<=num;j++)if (check(hh[i],hh[j]))mp[i][j]=mp[j][i]=1;
}int main()
{cin>>n>>m;pre();dp[0][1][0]=1;for (int i=0;i<n;i++)for (int j=1;j<=num;j++)for (int k=0;k<=m;k++)if (dp[i][j][k])for (int p=1;p<=num;p++)if (mp[j][p]&&k+hnum[p]<=m)dp[i+1][p][k+hnum[p]]+=dp[i][j][k];ll ans=0;for (int i=1;i<=num;i++)ans+=dp[n][i][m];cout<<ans<<endl;return 0;
}

  

转载于:https://www.cnblogs.com/forgot93/p/3842783.html

BZOJ 1087状态压缩DP相关推荐

  1. 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)

    目录 Problem A. 最短Hamilton路径 ProblemB. 蒙德里安的梦想 Problem C. Corn Fields Problem D. 小国王 Problem E. 炮兵阵地 P ...

  2. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)

    poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...

  3. BZOJ1688|二进制枚举子集| 状态压缩DP

    Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...

  4. hdu1074 状态压缩dp+记录方案

    题意:       给你一些作业,每个作业有自己的结束时间和花费时间,如果超过结束时间完成,一天扣一分,问你把n个作业完成最少的扣分,要求输出方案. 思路:       状态压缩dp,记录方案数的地方 ...

  5. FZU-2218 Simple String Problem(状态压缩DP)

    原题地址: 题意: 给你一个串和两个整数n和k,n表示串的长度,k表示串只有前k个小写字母,问你两个不含相同元素的连续子串的长度的最大乘积. 思路: 状态压缩DP最多16位,第i位的状态表示第i位字母 ...

  6. 《算法竞赛进阶指南》打卡-基本算法-AcWing 91. 最短Hamilton路径:位运算、状态压缩dp、dp

    文章目录 题目解答 题目链接 题目解答 分析: 状态压缩dp是用二进制数来表示状态. 数据范围n = 20, 那么状态总量就是2202^{20}220个状态. 可以按照以下思路去思考: 哪些点被用过 ...

  7. 状态压缩DP AcWing算法提高课 (详解)

    基础课的状态压缩点这里 基础课中 蒙德里安的梦想 属于 棋盘式状态压缩dp,最短Hamilton路径 属于 集合状态压缩dp 1064. 小国王(棋盘式/基于连通性) 这种棋盘放置类问题,在没有事先知 ...

  8. hdu 5067(状态压缩dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5067 解题思路:这道题开始想复杂了,想用bfs去求出最短距离,其实没必要,因为题目中没有阻碍关系,所以 ...

  9. hdu 5418(状态压缩dp+Floyd)

    点击打开链接 解题思路:这道题目和TSP问题很相似,唯一不同的是同一个点可以重复走几次.... 这道题目只有16个顶点,所以很容易想到状态压缩dp,dp[i][j]表示到达顶点i时的状态为j的最小花费 ...

最新文章

  1. STM32 GPIO的原理、特性、选型和配置
  2. 工作流-----WorkFlow
  3. location [=|$|最长原则|^~](nginx-1.4.4)
  4. python找不到tushare_python tushare安装
  5. 蓝桥杯java第八届第九题--分巧克力
  6. 交换算法经常使用的两个数的值
  7. MongoDB 我的学习笔记
  8. QT SQL使用指南
  9. jdk1.8 64位 32位免费下载
  10. KEIL C51软件安装
  11. 泛微低代码构建+流程驱动:绩效考核线上提报、评分、自动汇总
  12. pentaho java,用于创建Pentaho报告的Java代码,此报告接受输入作为数据集成(.ktr)文件...
  13. 2020年中国医药冷链物流行业市场现状分析,行业步入发展快车道「图」
  14. 猿创征文 | 常见的五款BI报表介绍
  15. java实用工具之XOM
  16. 《德鲁克管理思想精要》读书笔记1 - 管理是什么?
  17. ardupilot避障代码分析
  18. 自制win10 PE usb启动盘教程
  19. 洛谷-P1125-笨小猴
  20. iOS 真机测试错误解决An App ID with Identifier ...is not available

热门文章

  1. 《linux内核设计与实现》第一章
  2. UVA11624_Fire!
  3. linux命令-- 抓包
  4. 使用C# lock同时访问共享数据
  5. Spring Boot + Vue 前后端分离开发,权限管理的一点思路
  6. 使用DiskGenius对虚拟机磁盘进行压缩
  7. 人工智能究竟可以创造什么新的就业机会?
  8. 紫书 习题 10-20 UVa 1648 (推公式)
  9. git经常使用命令和问题
  10. 云安全:云访问安全代理(CASB)系统的陷阱和潜力