Pieces Assignment

My Tags   (Edit)
  Source : zhouguyue
  Time limit : 1 sec   Memory limit : 64 M

Submitted : 444, Accepted : 156

Background

有一个n*m的棋盘(n、m≤80,n*m≤80)要在棋盘上放k(k≤20)个棋子,使得任意两个棋子不相邻(每个棋子最多和周围4个棋子相邻)。求合法的方案总数。

Input

本题有多组测试数据,每组输入包含三个正整数n,m和k。

Output

对于每组输入,输出只有一个正整数,即合法的方案数。

Sample Input

2 2 3
4 4 1

Sample Output

0
16
 
由于棋子位置不同,相同妻子个数的棋盘又有多种状态,所以考虑用状态压缩dp。
dp[i][j][k]表示第i行,有j个棋子,状态为k的个数。
dp[i][j][k] = sum{ dp[i-1][j-num[k][t] };(保证合法的状态下)。
 
 

#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define INF 1000000007
#define mod 100000000
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int MAXN = ;
int n,m,K,cnt;
ll dp[][][];
ll q[<<MAXN];
int num[];
int getnum(int x)
{
int cnt = ;
while(x){
if(x & )cnt ++;
x >>= ;
}
return cnt;
}
void Init()
{
cnt = ;
memset(num,,sizeof(num));
//得到所有满足条件的合法的状态
for(int i = ; i < ( << m); i++){
if(!(i & (i << ))){
num[cnt] = getnum(i);
q[cnt++] = i; }
}
}
int main()
{
while(~scanf("%d%d%d",&n,&m,&K)){
if(n < m){
swap(n,m);
}
Init();
memset(dp,,sizeof(dp));
for(int i = ; i < cnt; i++){
if(num[i] > K)continue;
dp[][num[i]][i] = ;//第一行能够放num[i]个棋的状态为i的个数有1个
}
for(int i = ; i <= n; i++){//枚举行数
for(int j = ; j <= K; j++){//枚举棋子个数
for(int k = ; k < cnt; k++){//枚举状态
if(num[k] > j)continue;//如果当前状态的num[k]个数大于j个 不合法
for(int t = ; t < cnt; t++){
if((q[t]&q[k]) || num[t] > j)continue;//有相交或者个数不合法
dp[i][j][k] += dp[i-][j-num[k]][t];//第i行个数为j个棋子的状态为k的个数 等于所有
//上一行用了j-num[k]个棋子的状态为t的和。
}
}
}
}
ll ans = ;
for(int i = ; i < cnt; i++){
ans += dp[n][K][i];
}
cout<<ans<<endl;
}
return ;
}

hoj2662 状态压缩dp的更多相关文章

  1. [HOJ2662]Pieces Assignment<状态压缩dp>

    描述: 有一个n*m的棋盘(n.m≤80,n*m≤80)要在棋盘上放k(k≤20)个棋子,使得任意两个棋子不相邻(每个棋子最多和周围4个棋子相邻).求合法的方案总数. 输入: 本题有多组测试数据,每组 ...

  2. POJ 3254 Corn Fields(状态压缩DP)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4739   Accepted: 2506 Descr ...

  3. [知识点]状态压缩DP

    // 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...

  4. HDU-4529 郑厂长系列故事——N骑士问题 状态压缩DP

    题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种. 分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快, ...

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

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

  6. 状态压缩dp问题

    问题:Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Ev ...

  7. BZOJ-1226 学校食堂Dining 状态压缩DP

    1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec Memory Limit: 259 MB Submit: 588 Solved: 360 [Submit][ ...

  8. Marriage Ceremonies(状态压缩dp)

     Marriage Ceremonies Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu ...

  9. HDU 1074 (状态压缩DP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:有N个作业(N<=15),每个作业需耗时,有一个截止期限.超期多少天就要扣多少 ...

随机推荐

  1. avalon.js路由

    之前自己写了一个AJAX加载页面的方法:有时候一个页面里面会分区域加载不同的东西(div,html),但是IE的回退按钮,就失去任何意义了: 这两天研究了一下avalon.js的路由: 需要准备: 1 ...

  2. python中的字符串操作

    #!/usr/bin/python # -*- coding: UTF-8 -*- ''' str.capitalize() ''' str = 'this is a string example' ...

  3. PHP-数组函数

    今天在写一个给第三方同步数据的接口时遇到一个这种情况,我有一大坨数据,但是第三方只需要其中的几个而已,不及思索的就开始foreach $ret = array(); foreach ($needPar ...

  4. HTML5商城开发三 jquery 星星评分插件

    展示:

  5. BZOJ 1030 【JSOI2007】 文本生成器

    Description JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生 ...

  6. 折腾了1周把程序从sqlserver迁移到oracle上了,每折腾一次需要耗费1周时间

    主要花费时间的事情: 1:安装配套的服务器,安装操作系统,安装数据库,配置远程访问等等,一般会耗费1天时间,甚至2天时间,若手头安装盘不齐全,需要耗费更多时间. 2:远程传输安装文件.特别是开发环境等 ...

  7. Caffe学习系列(22):caffe图形化操作工具digits运行实例

    上接:Caffe学习系列(21):caffe图形化操作工具digits的安装与运行 经过前面的操作,我们就把数据准备好了. 一.训练一个model 右击右边Models模块的” Images" ...

  8. DataTrigger 绑定枚举

    在触发器中绑定枚举类型: <ControlTemplate.Triggers> <DataTrigger Binding="{Binding CheckStateEnum} ...

  9. 利用Canvas进行绘制XY坐标系

    首先来一发图 绘制XY的坐标主要是利用Canvas setLeft和setBottom功能(Canvas内置坐标的功能) 1.首先WPF中的坐标系都是从左到右,从上到下的 即左上角位置(0,0)点,所 ...

  10. 如何在 apache 中开启 gzip 压缩服务

    服务器设置 gzip 压缩是 web 开发里很普遍的做法.假设你要请求一个 100k 的文件,网络传输速度为 50k/s,需要 2s 才能得到数据,但是如果在服务器设置了 gzip 压缩,将服务端的文 ...