POJ2441 Arrange the Bulls(状压DP)
2016-02-14 09:20
519 查看
题目是,有n头牛,每头牛都喜爱某几个草地,要把这n头牛分配给m个不同的它们喜爱的草地,问有几种分配方式。
dp
[S]表示前n头牛分配完毕后占用的草地集合是S的方案数
dp[0][0]=1
dp
[S]+=dp[n-1][S-x](x∈S且n喜爱x)
不过的状态这样空间开销太大了,事实上n这个维度的信息S就包含了,所以dp[S]即可。
dp
[S]表示前n头牛分配完毕后占用的草地集合是S的方案数
dp[0][0]=1
dp
[S]+=dp[n-1][S-x](x∈S且n喜爱x)
不过的状态这样空间开销太大了,事实上n这个维度的信息S就包含了,所以dp[S]即可。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int d[1<<20]; bool map[22][22]; int main(){ int n,m,p,a; scanf("%d%d",&n,&m); for(int i=0; i<n; ++i){ scanf("%d",&p); while(p--){ scanf("%d",&a); map[i][a-1]=1; } } int res=0; d[0]=1; for(int i=1; i<(1<<m); ++i){ int cnt=-1; for(int j=0; j<m; ++j){ if((i>>j)&1) ++cnt; } for(int j=0; j<m; ++j){ if(((i>>j)&1) && map[cnt][j]) d[i]+=d[i^(1<<j)]; } if(cnt==n-1) res+=d[i]; } printf("%d",res); return 0; }
相关文章推荐
- poj 1716(贪心)
- eclipse 一些插件地址
- Objective-C的NSOperation多线程类基本使用指南
- 动效解析工厂:Mask 动画
- bzoj1398 寻找主人
- PHP解压tar.gz格式文件的方法
- chrome devtools 实用快捷键
- abstract class和interface的使用场景分别是什么?
- usaco training 1.3奶牛回文
- Android ProgressBar进度条使用详解
- 最新版本PHP 7 vs HHVM 多角度比较
- Android特效专辑(九)——仿微信雷达搜索好友特效,逻辑清晰实现简单
- git常用命令速查表
- Android特效专辑(九)——仿微信雷达搜索好友特效,逻辑清晰实现简单
- linux apache配置虚拟主机
- JAVA安装——Windows
- CSS基础研究(一)-各种各样的选择器
- SpringBoot项目推荐-Gradle版本
- Core Graphics之(三):绘制进度条
- Educational Codeforces Round 4 612D The Union of k-Segments(stl)