题意:用1*2的方格填充m*n的方格不能重叠,问有多少种填充方法 分析:dp[i][j]表示i行状态为j时的方案数,对于j,0表示该列竖放(影响下一行的该列),1表示横放成功(影响下一列)或上一列竖放成功.状态转移时,枚举每一行可能的状态上一行取反得下一行能放的状态. #include <map> #include <set> #include <list> #include <cmath> #include <queue> #include &…
Mondriaan's Dream POJ - 2411 可以用状压dp,但是要打一下表.暴力枚举行.这一行的状态.上一行的状态,判断如果上一行的状态能转移到这一行的状态就转移. 状态定义:ans[i][S]表示i行前已经全部填满,i行已经填上的列为集合S.如果有竖着的,全部当做用这一行的去补满上一行缺的. (貌似还是插头dp的入门题) #include<cstdio> #include<cstring> typedef long long LL; LL f[][]; LL h,w…
Mondriaan's Dream Problem Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after producing the drawings in his 'toilet series' (where he had to use his toilet paper to draw on, for all of his paper was…
题目大意:有一些1*2的矩形,现在用这些小矩形覆盖M*N的大矩形,不能重复覆盖,并且要覆盖完全,求有多少种覆盖方式. 分析:可以使用1和0两种状态来表示这个位置有没有放置,1表示放置,0表示没有放置,可以有三种放置方式. 一,竖着放. 二,不放.三,横着放.直接DFS这些情况就行了................还是递归容易理解. 代码如下: =============================================================================…
思路:将每一行看做一个二进制位,那么所有的合法状态为相邻为1的个数一定要为偶数个.这样就可以先把所有的合法状态找到.由于没一层的合法状态都是一样的,那么可以用一个数组保存.由第i-1行到第i行的状态转移是dp[i][now|num[j]]+=dp[i-1][k],其中now为(1<<m)-1-k;也就是把k中含有0的变1,1边0.k为第i-1行的所有二进制状态,转移条件是k&num[j]==num[j].唯一注意的是,最后一行的条件是k^num[j]==0. #include<i…
无非就是横着放与竖着放,状态中用1表示覆盖,0表示未覆盖. #include <iostream> #include <vector> #include <algorithm> #include <string> #include <string.h> #include <stdio.h> #include <queue> #include <stack> #include <map> #inclu…
http://poj.org/problem?id=3254 题意:有一个n*m的农场(01矩阵),其中1表示种了草可以放牛,0表示没种草不能放牛,并且如果某个地方放了牛,它的上下左右四个方向都不能放其他的牛, 问总共有多少种放牛方案??(不放也是一种方案) 状态压缩讲的好的博客 分析:利用状态压缩进行求解,先筛选出每行所有的可能状态,然后将每行与所有可行状态进行比较. dp[i][j]表示当第i行的状态为j时前i行的放牛方案总数. 所以状态转移方程便是 dp[i][j] = dp[i][j]+…
1. 为何状态压缩: 棋盘规模为n*m,且m≤10,如果用一个int表示一行上棋子的状态,足以表示m≤10所要求的范围.故想到用int s[num].至于开多大的数组,可以自己用DFS搜索试试看:也可以遍历0~2^m-1,对每个数值的二进制表示进行检查:也可以用数学方法(?) 2. 如何构造状态: 当然,在此之前首先要想到用DP(?).之后,才考虑去构造状态函数f(...). 这里有一个链式的限制 :某行上的某个棋子的攻击范围是2.即,第r行的状态s[i],决定第r-1行只能取部分状态s[p]:…
题目直达车:   POJ 1185 炮兵阵地 分析: 列( <=10 )的数据比较小, 一般会想到状压DP. Ⅰ.如果一行10全个‘P’,满足题意的状态不超过60种(可手动枚举). Ⅱ.用DFS搜出所有可能表示状态的整数(二进制1表示可以放,0则不能). Ⅲ.对每一行的地行进行状态处理(p[i]表示第i行地形的状态),二进制‘H’转1,‘P’转0: Ⅳ.用dp[i][j][k]表示第i行,且i行状态为j,i-1行状态为k时,最多能放置的量. Ⅴ.对于第i行的可行状态必须满足: ⒈  j &…
http://poj.org/problem?id=1324 Holedox Moving Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 17042   Accepted: 4065 Description During winter, the most hungry and severe time, Holedox sleeps in its lair. When spring comes, Holedox wakes…