/*
给定n头牛,m个谷仓,每头牛只能在一些特定的谷仓,一个谷仓只能有一头牛
问可行的安排方式
dp[i][j]表示前i头牛组成状态j的方案数,状态0表示无牛,1表示有牛
使用滚动数组即可
枚举到第i头牛时,状态j必须有i-1头牛,然后由这个状态推导出第i头牛的状态,再清0
*/
#include<iostream>
#include<cstring>
using namespace std;
int n,m,k,mp[25][25],dp[1<<21],tmp;int main(){while(cin>>n>>m){memset(dp,0,sizeof dp);memset(mp,0,sizeof mp);for(int i=1;i<=n;i++){cin>>k;while(k--)cin>>tmp,mp[i][tmp]=1;    }dp[0]=1; for(int i=1;i<=n;i++)for(int j=(1<<m)-1;j>=0;j--){//这里是由状态j推出别的状态,即由牛少的状态推出牛多的状态,所以此处必须从大到小枚举状态! if(dp[j]==0)continue;//状态j必须有i-1头牛,即必须大于0 for(int k=1;k<=m;k++)if(mp[i][k]&&j!=(j|(1<<(k-1))))//第i头牛可以放在k这个位置 dp[j|(1<<(k-1))]+=dp[j]; dp[j]=0;}int ans=0;for(int j=(1<<m)-1;j>=0;j--)ans+=dp[j];printf("%d\n",ans); }
} 

转载于:https://www.cnblogs.com/zsben991126/p/10358474.html

poj2441状态压缩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.最近开始看状态压缩,本想试着解出来,但是这个比那个牛吃草复杂多了...位运算还是不是很熟练,这个题的解题报告有 ...

  3. [转]状态压缩dp(状压dp)

    状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴. 为了更好的理解状压dp,首先介绍位运算相关的 ...

  4. DP大作战—状态压缩dp

    题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. python 写入网络视频文件很慢_用Python将数据写入LMDB非常慢
  2. 记录一下pandas的分组统计功能,agg
  3. Icarus Verilog与GTKWave简介及其下载安装
  4. movie计算机英语作文,一篇“Movie Review英语作文
  5. mybatis 中 Example 的使用 :条件查询、排序、分页(三种分页方式 : RowBounds、PageHelpler 、limit )
  6. css控制div等比高度
  7. 【MyBatis-Plus】第二章 条件构造器
  8. LAMP结构-访问日志
  9. Win10如何用命令行查看MD5
  10. Photoshop插件-证件照-3寸裁剪-3寸排版-脚本开发-PS插件
  11. 软件测试人员提升测试技能的10个妙招分享
  12. 毫米波雷达技术及应用大解析
  13. 两年数据对比柱形图_同期数据对比,你会做这样特殊的柱形图吗?趋势、差异值一目了然...
  14. 医学图像中解剖学坐标系(病人坐标系)和图像坐标系
  15. php百度收录排名代码,PHP查询百度收录数量代码
  16. 映宇宙2022年营收63亿元:同比下降三成,毛利率提升4.3个百分点
  17. jpa、hibernate、spring-data-jpa、jdbcTemplate
  18. PyQt高级界面控件及操作
  19. stm31.js下拉菜单说明
  20. IGBT的弥勒钳位和有源钳位的目的和区别

热门文章

  1. 测试SqlHelp,linq to SQL,Nhibernate批量处理数据的效率 2009-06-07
  2. qq互联开放平台 开源SDK共享 常见问题
  3. 漫步数学分析番外二(下)
  4. 声纹识别PLDA模型的理解
  5. leetcode - 688. “马”在棋盘上的概率
  6. Gamma函数(伽玛函数)的一阶导数、二阶导数公式推导及java程序
  7. C++/C--istringstream、ostringstream、stringstream 类介绍【转载】
  8. Markdown--编辑表格与矩阵
  9. FFmpeg--命令详解
  10. 单应性矩阵的相关理解