昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激。
P1879 [USACO06NOV]Corn Fields G
题目链接
输入
2 3
1 1 1
0 1 0
输出
9
一道简单的状压DP入门题。
先看大佬讲解样例这是链接我截下来放到下面了
本题我的代码的思路
1、先预处理第i行的草地状态 i n i t [ i ] init[i] init[i],压缩为一个整数。
2、再预处理第i行不相邻的状态 l e g a l [ i ] legal[i] legal[i],每行共有 ( 1 < < m ) − 1 (1<<m)-1 (1<<m)−1种状态,但是很多是存在相邻的情况,所以提前处理不合法的状态可以在状态转移中降低很多时间复杂度。
那么怎么判断某一状态是否相邻呢?只需要 ( i & ( i < < 1 ) = = 0 ) & & ( i & ( i > > 1 ) = = 0 ) (i\&(i<<1)==0)\&\&(i\&(i>>1)==0) (i&(i<<1)==0)&&(i&(i>>1)==0)就可以判断,如果存在相邻情况则将 l