POJ 2441 Arrange the Bulls(状态压缩DP)
2024-08-26 17:40:43
题意很简单,n头牛,m个位置,每头牛有各自喜欢的位置,问安排这n头牛使得每头牛都在各自喜欢的位置有几种安排方法。
2000MS代码:
#include <cstdio>
#include <cstring>
int dp[(<<)+];
int one[( << ) + ];
//用来数出状态为i时1的个数,具体到这个题中就是
//状态为i时有多少头牛已经安排好牛棚
void CountOne(int m)
{
for(int i=; i< ( << m); ++i)
{
int num=;
for(int j=; j< m; ++j)
{
if( (i & ( << j)) != )//i的第j位置是否为一
++num;
}
one[i] = num;
}
}
int main()
{
// freopen("in.cpp","r",stdin);
int n,m;
scanf("%d%d",&n,&m);
CountOne(m);
memset(dp,,sizeof(dp));
dp[] = ; //一头牛都没有安排,状态为0的满足条件的方案数为1
for(int i=; i<=n; ++i)
{
int cnt; //每头牛喜欢住的牛棚数
scanf("%d",&cnt);
while(cnt--)
{
int k; //该牛棚编号
scanf("%d",&k);
--k;//使得牛棚编号为 0 ~ m-1
for(int j=; j< ( << m); ++j)
{
if((j & ( << k)) != && one[j] == i) //这个状态已经安排好了i头牛,且第k个牛棚安排的是第i头牛
dp[j] += dp[j-(<<k)];
}
}
}
// 最终结果为安排了n头牛的状态满足条件的方案数的总和
int ans=;
for(int j=; j< ( << m ); ++j)
{
if(one[j] == n)
{
ans += dp[j];
}
}
printf("%d\n",ans);
return ;
}
90MS
#include <stdio.h>
#include <string.h> int map[][];
int now[(<<)+]; int main()
{
int i,j,n,m,k,x,p,ret;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(map,,sizeof(map));
for (i=;i<n;i++)
{
scanf("%d",&k);
while(k--)
{
scanf("%d",&x);
x--;//0~m-1编号
map[i+][x]=;
}
}
if (n>m)
{
printf("0\n");
continue;
}
memset(now,,sizeof(now));
now[]=;
for (i=;i<n;i++)
{
for (j=(<<m)-;j>=;j--)
{
if (now[j]==) continue;
for (k=;k<m;k++)
{
if ((j & (<<k))!=) continue;//判断j的第k的位置为1
if (map[i+][k]==) continue;//在k的棚没有位置
p=(j | (<<k));//j的第k的位置变1
now[p]+=now[j];
}
now[j]=;
}
}
ret=;
for (i=;i<(<<m);i++)
{
ret+=now[i];
}
printf("%d\n",ret);
}
return ;
}
最新文章
- 针对每种Windows Server 操作Excel、Word等Office组件遇到“ComException";、”80070005“等COM错误的解决方案大汇总
- JVM参数OmitStackTraceInFastThrow:不打印NullPointerException异常堆栈
- css 一些灵动性的小方法
- HDU 5965 枚举模拟 + dp(?)
- 大数的乘法(C++)
- (转)SQL Server 的事务和锁(二)-Range S-S锁
- 红黑树、B(+)树、跳表、AVL等数据结构,应用场景及分析,以及一些英文缩写
- iOS网络HTTP、TCP、UDP、Socket 知识总结
- 深入理解linux网络技术内幕读书笔记(八)--设备注册与初始化
- poj 1523 SPF(tarjan求割点)
- 在Visual Studio中使用Debug Visualizers在C++中实现对原始类的自定义调试信息显示
- java之equals 与 == 的区别
- Vue-admin工作整理(十): Vuex-Actions(模拟接口请求实现组件字段更新)
- 【SVN】CentOS7.0下搭建SVN服务器
- Segment set(线段并查集)
- Async Await异步调用WebApi
- Matlab警告消息消除
- POJ 2987 - Firing - [最大权闭合子图]
- 环境变量.JAVA_HOME
- servlet中关于下载