美文网首页
蒙德里安的梦想

蒙德里安的梦想

作者: Wilbur_ | 来源:发表于2021-03-21 13:05 被阅读0次

    这道题是状态压缩相关的,还是需要练习……CSAPP这本书里有介绍状态压缩的基本原理,我觉得还是很有用的。
    下面是代码

    import java.io.*;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int N = 12, M = 1 << N;
            long[][] dp = new long[N][M];
            boolean[] st = new boolean[M];
            while (true) {
                String[] s1 = br.readLine().split(" ");
                int n = Integer.parseInt(s1[0]), m = Integer.parseInt(s1[1]);
                if (n == 0 && m == 0) break;
                for (int i = 0; i < (1<<n); i++) {
                    st[i] = true;
                    int count = 0;
                    for (int j = 0; j < n; j++) {
                        if ((i >> j & 1) == 1) {
                            if ((count & 1) == 1) {
                                st[i] = false;
                            }
                            count = 0;
                        } else count++;
                    }
                    if ((count & 1) != 0) st[i] = false;
                }
                dp = new long[N][M];
                dp[0][0] = 1;
                for (int i = 1; i <= m; i++) {
                    for (int j = 0; j < 1 << n; j++) {
                        for (int k = 0; k < 1 << n; k++) {
                            if (((j & k) == 0) && st[j | k]) {
                                dp[i][j] += dp[i-1][k];
                            }
                        }
                    }
                }
                System.out.println(dp[m][0]);
            }
    
        }
    }
    

    相关文章

      网友评论

          本文标题:蒙德里安的梦想

          本文链接:https://www.haomeiwen.com/subject/rgvncltx.html