HOJ-2662Pieces Assignment(状态压缩,动态规划)
Pieces Assignment
Source : zhouguyue
Time limit : 1 sec Memory limit : 64 M
Submitted : 415, Accepted : 149
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][p]+=dp[i-1][v][p-t];
#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <stdlib.h>
using namespace std;
long long int dp[85][1<<10][25];//在第i行,棋子为k个,状态为s的状态数
int n,m,k;
int getsum(int x)
{
int res=0;
int i=0;
while(x)
{
if(res&&(x&1))
return -1;
if(res=(x&1))
i++;
x>>=1;
}
return i;
}
int main()
{
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
//根据n,m的大小确定行和列
if(n<m)
swap(n,m);
memset(dp,0,sizeof(dp));
dp[0][0][0]=1;
int end=(1<<m)-1;
for(int i=1;i<=n;i++)
{
for(int p=0;p<=k;p++)
{
for(int j=0;j<=end;j++)
{
int t=getsum(j);
if(t==-1||t>p)
continue;
for(int v=0;v<=end;v++)
{
if(getsum(v)==-1||(v&j))
continue;
dp[i][j][p]+=dp[i-1][v][p-t];
}
}
}
}
long long int sum=0;
for(int i=0;i<=end;i++)
sum+=dp[n][i][k];
printf("%lld\n",sum);
}
HOJ-2662Pieces Assignment(状态压缩,动态规划)的更多相关文章
- BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划
BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被 ...
- 状态压缩动态规划 状压DP
总述 状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式 很多棋盘问题都运用到了状压,同时,状压也很经常和BFS及DP连用,例题里会给出介绍 有了状态,DP就比 ...
- 状态压缩动态规划(状压DP)详解
0 引子 不要999,也不要888,只要288,只要288,状压DP带回家.你买不了上当,买不了欺骗.它可以当搜索,也可以卡常数,还可以装B,方式多样,随心搭配,自由多变,一定符合你的口味! 在计算机 ...
- poj 3254(状态压缩+动态规划)
http://poj.org/problem?id=3254 题意:有一个n*m的农场(01矩阵),其中1表示种了草可以放牛,0表示没种草不能放牛,并且如果某个地方放了牛,它的上下左右四个方向都不能放 ...
- 【学术篇】状态压缩动态规划——POJ3254/洛谷1879 玉米田Corn Field
我要开状压dp的坑了..直播从入门到放弃系列.. 那就先拿一道状压dp的水题练练手吧.. 然后就找到了这一道..这道题使我清醒地认识到阻碍我的不是算法,而是视力= = 传送门: poj:http:// ...
- [HOJ2662]Pieces Assignment<状态压缩dp>
描述: 有一个n*m的棋盘(n.m≤80,n*m≤80)要在棋盘上放k(k≤20)个棋子,使得任意两个棋子不相邻(每个棋子最多和周围4个棋子相邻).求合法的方案总数. 输入: 本题有多组测试数据,每组 ...
- BZOJ1087 [SCOI2005]互不侵犯King 状态压缩动态规划
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1087 题意概括 在n*n的棋盘上面放k个国王,使得他们互相无法攻击,问有多少种摆法. 题解 dp[ ...
- BZOJ1076 [SCOI2008]奖励关 概率 状态压缩动态规划
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1076 题意概括 有n个东西,k次扔出来.每次等概率扔出其中一个. 你可以拿这个东西,但是有条件,得 ...
- YBT 5.4 状态压缩动态规划
#loj 10170. 「一本通 5.4 例 1」骑士 看数据范围n<=10,所以不是搜索就是状压dp,又因为搜索会超时所以用dp dp[i][k][j]表示现已经放到第i行,前面共有k个,这一 ...
随机推荐
- C#------Aspose.cells使用方法
转载: http://www.cnblogs.com/muer/p/yaxle.html 代码: public ActionResult ImportData(HttpPostedFileBase f ...
- logback -- 配置详解 -- 三 -- <encoder>
附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...
- Python模块常用的几种安装方式 【转】
转自:http://blog.chinaunix.net/uid-23500957-id-3781907.html 一. 单文件模块直接把文件拷贝到 $python_dir/Lib 二. 多文件模块, ...
- Python 网络爬虫
爬虫介绍 爬取图片 爬取文本 爬虫相关模块:re 爬虫相关模块:urllib 爬虫相关模块:urllib2 爬虫相关模块:cookielib 爬虫相关模块:requests 爬取需要登录的页面
- MongoDB 数据管理
MongoDB 相关操作: > db.version() // 查看 MongoDB 版本 > db.serverStatus() // 查看 MongoDB 服务器的状态 MongoDB ...
- Fragment切换问题
片断一: add hind @Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) { switch (check ...
- mysql官方下载
https://dev.mysql.com/downloads/file/?id=472899
- CSS-禁用a标签
<style> a.disabled { pointer-events: none; filter: alpha(opacity=50); /*IE滤镜,透明度50%*/ -moz-opa ...
- numpy基本方法
在学习python的时候常常需要numpy这个库,每次都是用一个查一个,这个,终于见到一个完整的总结了http://blog.csdn.net/blog_empire/article/details/ ...
- 【云迁移论文笔记】Cloud Migration Research:A Systematic Review
Cloud Migration Research:A Systematic Review Author Info: Pooyan Jamshidi PhD Postdoctoral Researche ...