usaco2006nov Corn Fields
题目:Corn Fields
题目来源:POJ3254
分析
题目大意为:
给定一个12*12的矩形,每个格子为0或1,0为不能放东西,1可以
现在放东西进格子里,一个格子可以放的条件:
- 这个格子可以放(值为1)
- 相邻的四个格子没有放
求有几种放法
注意到没有后效性,可以用动归做
以每行为阶段,以每行的放的情况为状态,压缩为二进制(N<=12)
状态转移的约束为1),2)条件
解法
F[I,J]表示第I行,状态为J
这样转移方程为1
F[I, J] = SIGMA{ F[I-1, K] } (j and k=0)
当然每行的状态确定前要先检查是否符合条件1
优化
如果每行都去考虑与地图的契合性,会非常浪费时间
因为J包含了所有可能,K也是,这样比较J,K就会包含许多无用的状态,J不符的和K不符的
这样转移复杂度会达到O(2^2N)将近7000W
所以要进行优化,将每行的符合地图的状态预处理出来
详解
边界为1
F[0,0] = 1;
细节
注意要模100000000
源程序
1 | Program Lwx; |