UESTC 882 冬马党 --状压DP
2014-05-31 20:44
253 查看
定义:dp[i][j]为状态为j时,第i行符合条件的状态数
转移方程:dp[i][j] += dp[i-1][t] //t为上一行状态,与当前行不冲突。
从第一行开始向下枚举,每次枚举当前行的状态和上一行的状态,如果不相邻或者未被地雷占据并且两行的关系是合法的,则加上方法数。
最后res = SUM(dp
[s]) (s=0~S,为最后一行的状态)
代码:
View Code
转移方程:dp[i][j] += dp[i-1][t] //t为上一行状态,与当前行不冲突。
从第一行开始向下枚举,每次枚举当前行的状态和上一行的状态,如果不相邻或者未被地雷占据并且两行的关系是合法的,则加上方法数。
最后res = SUM(dp
[s]) (s=0~S,为最后一行的状态)
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #define Mod 1000000007 using namespace std; #define N 100000000 //dp[i][j]:状态为j时,第i行符合条件的状态数 int wei[14]; int a[2070]; int dp[14][2070]; int checkadj(int state) { if(state & (state<<1)) //相邻 return 0; return 1; } int checkplace(int state,int i) { if(state & wei[i]) //被地雷占据 return 0; return 1; } int main() { int n,m,i,j,k,state; scanf("%d%d",&n,&m); memset(wei,0,sizeof(wei)); memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { scanf("%d",&state); if(!state) wei[i] += (1<<(m-j)); //被地雷占据赋为1 } } int Fst = 1<<m; k = 0; for(state=0;state<Fst;state++) //第一行 { if(checkadj(state)) { a[k++] = state; if(checkplace(state,1)) dp[1][k-1] = 1; } } for(i=2;i<=n;i++) { for(j=0;j<k;j++) //枚举上一行 { if(!checkplace(a[j],i-1)) continue; for(state=0;state<k;state++) //枚举这一行 { if(!checkplace(a[state],i) || (a[j] & a[state])) continue; dp[i][state] = (dp[i][state] + dp[i-1][j])%N; } } } int res = 0; for(i=0;i<k;i++) res = (res + dp [i])%N; printf("%d\n",res); return 0; }
View Code
相关文章推荐
- UESTC 885 方老师买表 --状压DP
- SNNU女装T台走秀(状压dp)
- 几个基础数位DP (hdu 2089,hdu 3555 ,uestc 1307 windy 数)
- Simple String Problem FZU - 2218 状压dp
- poj3254(Corn Fields)状压dp
- hdu 检测赛 Problem C(状压dp)
- [bzoj2064] 分裂 状压dp
- 【HDU5727 2016 Multi-University Training Contest 1E】【状压DP做法 匈牙利匹配做法】Necklace n阳n阴排成环 特定相邻会抑郁 问最少抑郁阳球数
- TopCoder SRM 663 Div2 Problem 1000 - CheeseRolling (状压dp)
- Light oj 1147 - Tug of War(状压dp)
- [luoguP2831] 愤怒的小鸟(状压DP)
- hdu 2686(状压dp)
- UESTC 880 生日礼物 --单调队列优化DP
- UVA Live Archive 4490 Help Bubu(状压dp)
- poj 3254 Corn Fields(poj1185简化版 状压dp)
- UVA 11825 Hackers' Crackdown - 状压dp
- LA 4794 Sharing Chocolate (状压DP)
- ZOJ 3777 Problem Arrangement(状压DP)
- HDU 1565 方格取数(1) (状压DP)
- HDOJ 题目1074 Doing Homework(状压DP)