饭宝 发表于 2022-8-10 12:00:30

POJ3254 Corn Fields(状压DP)

dp表示第i行第j个状态时,前i行得到的方案数,该状态可由前一行的状态转移过来。
本题重点在于合法性检测:每一行都用一个二进制数表示,1.二进制数不能有相邻的1;2.要和原地图匹配;3.上下两行不能有冲突。
预处理地图时将0换成1,方便进行2号检测,用位运算&可以实现。
1 #include 2 #include 3 using namespace std; 4 #define mod 100000000 5 int m,n,top=0; 6 int state;//储存合法状态7 int dp;//dp表示第i行,第j种编号时,前i行的可行方案数8 int cur; 9 10 bool check(int x){//有相邻的1则不合法 11   if(x&x
页: [1]
查看完整版本: POJ3254 Corn Fields(状压DP)