POJ 2441 Arrange the Bulls(状态压缩DP)
来源:互联网 发布:ss账号哪里购买好 知乎 编辑:程序博客网 时间:2024/05/01 22:34
题目链接
题目大意是农场有M个场子,有N头牛,每头牛只会去P个指定的场子,不同的牛不会在同一个场子,问把所有的牛分配好有几种方法。
我一开始想到是记忆化搜索,但是发现记忆化什么呢?
但我还是写了一发,超了内存,优化一次,超了时间。。。
后来我发现2的20次方也就100,直接状态压缩dp把,但是内存呢,滚动,结果样例都过不了,仔细一想,滚动数组好像要处理一下。
结果A了
#include <cstring>#include <cmath>#include <algorithm>#include <cstdio>#include <iostream>#include <map>#define LL long longusing namespace std;int dp[2][(1<<20)];int mp[21][22];int n,m;int main(){ scanf("%d%d",&n,&m); for(int i=0;i<n;i++){ scanf("%d",&mp[i][0]); for(int j=1;j<=mp[i][0];j++){ scanf("%d",&mp[i][j]); } } memset(dp,0,sizeof(dp)); dp[0][0] = 1; int nxt = 1,pre = 0; for(int i=0;i<n;i++){ for(int j=1;j<=mp[i][0];j++){ for(int k=1;k<(1<<m);k++){ if(!(k&(1<<(mp[i][j]-1)))) continue; dp[nxt][k] += dp[pre][k&(~(1<<(mp[i][j]-1)))] ; //printf("%d %d %d\n",dp[nxt][k],i,j); } } memset(dp[pre],0,sizeof(dp[pre]));//就是这里需要处理 swap(nxt,pre); } int ans = 0; for(int i=1;i<(1<<m);i++) ans += dp[pre][i]; printf("%d\n",ans);}
0 0
- poj 2441Arrange the Bulls解题报告-状态压缩dp
- POJ 2441 Arrange the Bulls / 状态压缩DP
- POJ 2441 Arrange the Bulls 状态压缩DP
- POJ 2441 Arrange the Bulls(状态压缩DP)
- POJ 2441 Arrange the Bulls(状态压缩DP)
- POJ 2441 Arrange the Bulls(状态压缩DP入门)
- POJ - 2441 Arrange the Bulls (状态压缩DP)
- POJ 2441 Arrange the Bulls 状态压缩DP
- POJ2441 Arrange the Bulls 状态压缩DP
- Arrange the Bulls(poj2441)状态压缩dp
- 状态压缩DP POJ 2441 Arrange the Bulls(本题用队列有奇效)
- poj 2441 Arrange the Bulls(状压DP)
- poj 2441 Arrange the Bulls (状压dp)
- POJ 2441 Arrange the Bulls
- poj 2441 Arrange the Bulls
- POJ-2441-Arrange the Bulls
- POJ 2441 Arrange the Bulls
- POJ 2441 Arrange the Bulls
- 【Linux】进程间通信-信号量详解及编程实例
- IO流
- Android 数据显示在屏幕上
- Linux 线程同步的三种方法
- 赛码网730内推节Java 第一题
- POJ 2441 Arrange the Bulls(状态压缩DP)
- "Spark Streaming + Kafka direct + checkpoints + 代码改变" 引发的问题
- Android 布局练习
- 设计模式之合成模式
- composer 安装yii2框架
- jQuery 从零开始学习 (五) 动画
- Double
- NSUserDefaults standardUserDefaults使用注意事项
- Hdu5776 字串的和[鸽巢原理]