zoukankan      html  css  js  c++  java
  • PKU 2411 Mondriaan's Dream 状态DP

    以前做过这题,今天又写了一次,突然发现写了一个好漂亮的DFS……(是不是太自恋了 - -#)

    代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 
     5 using namespace std;
     6 
     7 typedef __int64 ll;
     8 
     9 int n, m;
    10 ll dp[12][1<<11];
    11 
    12 void dfs(int turn, int now, int next, int cnt) {
    13     if (cnt > n) return ;
    14     if (cnt==n) {
    15         dp[turn+1][next] += dp[turn][now];
    16         return ;
    17     }
    18     if (!(now&(1<<cnt))) { //如果cnt格没放,那就必须放
    19         dfs(turn, now, next|(1<<cnt), cnt+1); //放一个竖着的
    20         if (!(now&(1<<(cnt+1))) && (cnt<n-1)) dfs(turn, now, next, cnt+2); //放一个横着的
    21     } else dfs(turn, now, next, cnt+1); //如果这格被上一层的占了,那这一格就不能放任何东西
    22 }
    23 
    24 int main() {
    25     #ifdef Phantom01
    26         freopen("PKU2411.txt", "r", stdin);
    27     #endif // Phantom01
    28 
    29     while (scanf("%d%d", &n, &m)!=EOF) {
    30         if (n==0&&m==0) return 0;
    31 
    32         if ((n*m)&1) {
    33             puts("0");
    34             continue;
    35         }
    36         memset(dp, 0, sizeof(dp));
    37         dp[0][0] = 1;
    38         for (int i = 0; i < m; i++)
    39             for (int j = 0; j < (1<<n); j++) if (dp[i][j])
    40                 dfs(i, j, 0, 0);
    41         printf("%I64d
    ", dp[m][0]);
    42     }
    43 }
    PKU2411
  • 相关阅读:
    go通道小案例
    go执行cmd命令并获取输出内容
    vue快速生成二维码
    vue.js数字简化 万转化k显示
    uniapp实现小程序获取用户信息
    实现图片预加载功能
    C# MD5加密字符串方法
    一个封装的 HttpClientHelper
    简易通过队列存储并异步打日志实现
    变量
  • 原文地址:https://www.cnblogs.com/Phantom01/p/3691931.html
Copyright © 2011-2022 走看看