poj_2441 状态压缩dp
题目大意
N头牛,M个谷仓,每个牛c都有它喜欢的若干个谷仓,现在要将这N头牛安排进谷仓,使得每个牛都位于它喜欢的谷仓,而每个谷仓只能有一头牛。求安排的方案总数。N, M <= 20
题目分析
将M个谷仓视为一个整数的M个位,位i为1表示谷仓i被牛占用,否则表示谷仓i没有被牛占用。用状态 dp[i][j] 表示前i头牛安排进谷仓,使得谷仓占用情况形成整数j,所有的方案总数,那么有递推公式:
dp[i+1][j | 1 << k] = dp[i+1][j | 1 << k] + dp[i][j],其中j的第k位为0(放置两头牛都占用谷仓k),且k为第i+1头牛喜欢的某个谷仓。
由于dp[i+1][...]只和dp[i][...]有关,因此可以使用循环数组进行状态压缩。dp[i&1][...]表示前i头牛的情况,dp[(i-1)&1][...]表示前i-1头牛的情况。
实现(c++)
#include <iostream>
#include<stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
#define MAX_N 22
vector<int> gCowLikesBarn[MAX_N]; //存放牛i 喜欢的barns
//不超过20头牛,有牛位于barn k中,则第k位置为1,则用一个整数表示barn的使用情况。 不超过 1 << 22
//dp[i][j] 表示前i头牛,barn的占用情况构成数字j,则总的情形个数,则有递推公式
//dp[i+1][j | 1 << k] = dp[i+1][j | 1 << k] + dp[i][j],其中 j的二进制第k位上为0,否则存在重复,
//且k为第i+1头牛的一个喜欢的barn号 //dp[i+1][...] 只和 dp[i][...]有关,因此考虑使用滚动数组,优化空间。
int dp[2][1 << MAX_N]; int main(){
int n, m;
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++){
int p;
gCowLikesBarn[i].clear();
scanf("%d", &p);
for (int j = 1; j <= p; j++){
int barn;
scanf("%d", &barn);
gCowLikesBarn[i].push_back(barn - 1);
}
}
dp[0][0] = 1;
for (int i = 1; i <= n; i++){
memset(dp[i & 1], 0, sizeof(dp[i & 1])); //滚动数组的当前行(共两行)
for (int j = 0; j < (1 << m); j++){
if (dp[(i - 1) & 1][j] == 0) //如果前i-1头牛所在的barn构成j的方案总数为0,则j和第i头牛再构成的方案 不合法!
continue; for (int k = 0; k < gCowLikesBarn[i].size(); k++){ //dp[i+1][j | 1 << k] = dp[i+1][j | 1 << k] + dp[i][j]
if (((j >> gCowLikesBarn[i][k]) & 1) == 0){ //不能重复有牛
dp[i & 1][j | (1 << gCowLikesBarn[i][k])] += dp[(i - 1) & 1][j];
}
}
}
}
int count = 0;
//此时的dp[i][j]中存放了 n头牛所在的barn构成j的方案总数,全部加和
for (int i = 0; i < (1 << m); i++){
count += dp[n & 1][i];
}
printf("%d\n", count);
return 0;
}
poj_2441 状态压缩dp的更多相关文章
- hoj2662 状态压缩dp
Pieces Assignment My Tags (Edit) Source : zhouguyue Time limit : 1 sec Memory limit : 64 M S ...
- POJ 3254 Corn Fields(状态压缩DP)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4739 Accepted: 2506 Descr ...
- [知识点]状态压缩DP
// 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...
- HDU-4529 郑厂长系列故事——N骑士问题 状态压缩DP
题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种. 分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快, ...
- DP大作战—状态压缩dp
题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...
- 状态压缩dp问题
问题:Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Ev ...
- BZOJ-1226 学校食堂Dining 状态压缩DP
1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec Memory Limit: 259 MB Submit: 588 Solved: 360 [Submit][ ...
- Marriage Ceremonies(状态压缩dp)
Marriage Ceremonies Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu ...
- HDU 1074 (状态压缩DP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:有N个作业(N<=15),每个作业需耗时,有一个截止期限.超期多少天就要扣多少 ...
随机推荐
- Android——FileOutputStream与openFileOutput()的区别分析【第一个用于文件存储,第二个用于SD卡存储】【转】
本文实例分析了Android编程中FileOutputStream与openFileOutput()的区别.分享给大家供大家参考,具体如下: openFileOutput() 首先给大家介绍使用文件如 ...
- openwrt使用list
openwrt中用到双向无头链表,实际应用时应在外部定义实体链表头,后续可直接应用链表函数(宏定义已将链表头排除在外): static struct list_head timeouts = LIST ...
- 一站式学习Wireshark(八):应用Wireshark过滤条件抓取特定数据流
应用抓包过滤,选择Capture | Options,扩展窗口查看到Capture Filter栏.双击选定的接口,如下图所示,弹出Edit Interface Settints窗口. 下图显示了Ed ...
- redis调优
1.先把持久化数据备份一份,然后使用rdb分析工具分析一下大的键值2.然后DBA删除一部分不用的3.然后再配置最大内存 千万不要没清理数据就直接把内存限制较小 那样会触发redis对内存达到限制的处理 ...
- PHP无限极分类 - 2 - 无限极评论
参考上一节: 结合ZUI前端框架,制作的无限极评论列表: 项目目录: 代码: <!DOCTYPE html> <html lang="en"> <he ...
- Ubuntu安装MediaInfo
Ubuntu版 打包下载:艺搜下载 适用于Ubuntu 12.10(i386) 安装libzen0_v0.4.29 _i386.xUbuntu_12.10.deb 安装libmediainfo0_v0 ...
- 20个优秀的JavaScript 键盘事件处理库
键盘事件是 Web 开发中最常用的事件之一,通过对键盘事件的捕获和处理可以提高网站的易用性和交互体验.下面,我们向大家介绍收集的20款优秀的 JavaScript 键盘事件处理库,帮助开发人员轻松处理 ...
- Qt中的串口编程之一
QtSerialPort 简介 功能介绍 SerialPort SerialPortInfo 源代码 编译和安装 配置编译环境 Perl只是在Qt5的时候才需要Qt4的情况下可以不配置 使用如下推荐步 ...
- 关于Cocos2d-x中精灵节点的透明度的设置
1.当我们需要某个精灵作为一个大一点的容器来存放其他的小精灵的时候,我们先设置这个精灵的大小 setTextureRect(Rect(0, 0, babySize.width, babySize.he ...
- am335x uart分析
/************************************************************ * am335x uart分析 * 本文记录am335x uart驱动的注册 ...