题目链接
题意:
一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相邻。问有多少种放牛方案(一头牛都不放也是一种方案)
state[i] 表示对于一行,保证不相邻的方案
状态:dp[i][ state[j] ] 在状态为state[j]时,到第i行符合条件的可以放牛的方案数
状态转移:dp[i][ state[j] ] =Sigma dp[i-1][state'] (state'为符合条件的所有状态)
nclude
#include
#include
#include
using namespace std; const int mod = 100000000; int state[1<<13], cnt; //对于一行,保证不相邻的方案 int dp[20][1<<13]; int cur[20]; // cur[i]的值得二进制形式0表示能放,1表示不能放。 int main() { int n, m, i, j, k; scanf("%d%d", &n, &m); int M = 1<