dengxinyi 6 سال پیش
والد
کامیت
03840fa3f5
1فایلهای تغییر یافته به همراه15 افزوده شده و 6 حذف شده
  1. 15 6
      poj/2411.mondriaans-dream/main.cc

+ 15 - 6
poj/2411.mondriaans-dream/main.cc

@@ -10,8 +10,16 @@ long long dp[2][N];
 
 int h, w;
 
-bool is_match(int i, int j) {
-  
+void dfs(int i, int j, int curr, int next) {
+  if (j == w) {
+    dp[i ^ 1][next] += dp[i][curr];
+    return;
+  }
+  int mask = 1 << j;
+  if ((mask & curr) > 0) dfs(i, j + 1, curr, next);
+  if ((mask & curr) == 0) dfs(i, j + 1, curr, next | mask);
+  if (((mask & curr) > 0) && (((mask << 1) & curr) > 0))
+    dfs(i, j + 2, curr, (next | mask) | (mask << 1));
 }
 
 int main() {
@@ -19,14 +27,15 @@ int main() {
     if (h == 0 && w == 0) break;
     memset(dp, 0, sizeof(dp));
     dp[0][(1 << w) - 1] = 1;
-    int cur = 1;
+    int cur = 0;
     for (int i = 0; i < h; i++) {
+      memset(dp[cur ^ 1], 0, sizeof(dp[cur ^ 1]));
       for (int j = 0; j < N; j++) {
-        for (int k = 0; k < N; k++) {
-
-        }
+        if (dp[cur][j] != 0) dfs(cur, 0, j, 0);
       }
+      cur ^= 1;
     }
+    printf("%lld\n", dp[cur][(1 << w) - 1]);
   }
   return 0;
 }