zoukankan      html  css  js  c++  java
  • BZOJ 3195: [Jxoi2012]奇怪的道路

    3195: [Jxoi2012]奇怪的道路

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 336  Solved: 209
    [Submit][Status][Discuss]

    Description

    小宇从历史书上了解到一个古老的文明。这个文明在各个方面高度发达,交通方面也不例外。考古学家已经知道,这个文明在全盛时期有n座城市,编号为1..n。m条道路连接在这些城市之间,每条道路将两个城市连接起来,使得两地的居民可以方便地来往。一对城市之间可能存在多条道路。
    据史料记载,这个文明的交通网络满足两个奇怪的特征。首先,这个文明崇拜数字K,所以对于任何一条道路,设它连接的两个城市分别为u和v,则必定满足1 <=|u - v| <= K。此外,任何一个城市都与恰好偶数条道路相连(0也被认为是偶数)。不过,由于时间过于久远,具体的交通网络我们已经无法得知了。小宇很好奇这n个城市之间究竟有多少种可能的连接方法,于是她向你求助。
    方法数可能很大,你只需要输出方法数模1000000007后的结果。

    Input

    输入共一行,为3个整数n,m,K。

    Output

    输出1个整数,表示方案数模1000000007后的结果。

    Sample Input

    【输入样例1】
    3 4 1
    【输入样例2】
    4 3 3

    Sample Output

    【输出样例1】
    3

    【输出样例2】
    4

    HINT

    【数据规模】
    100%的数据满足1<= n <= 30, 0 <= m <= 30, 1 <= K <= 8.


    【题目说明】

    两种可能的连接方法不同当且仅当存在一对城市,它们间的道路数在两种方法中不同。

    在交通网络中,有可能存在两个城市无法互相到达。

    Source

     
    [Submit][Status][Discuss]

    状压,懒得动脑子了……

     1 #include <bits/stdc++.h>
     2 const int mod = 1000000007;
     3 int n, m, t, bit[15], f[32][31][1024][10];
     4 signed main(void) {
     5     f[2][0][0][0] = 1;
     6     scanf("%d%d%d", &n, &m, &t);
     7     for (int i = bit[0] = 1; i < 10; ++i)
     8         bit[i] = bit[i - 1] << 1;
     9     for (int i = 2; i <= n; ++i)
    10         for (int j = 0; j <= m; ++j)
    11             for (int k = 0; k < bit[t + 1]; ++k) {
    12                 for (int l = 0; l < t; ++l)
    13                     if (f[i][j][k][l]) {
    14                         (f[i][j][k][l + 1] += f[i][j][k][l]) %= mod;
    15                         if (i - t + l > 0 && j < m)
    16                             (f[i][j + 1][k ^ bit[l] ^ bit[t]][l] += f[i][j][k][l]) %= mod;
    17                     }
    18                 if(!(k & 1) && f[i][j][k][t])f[i + 1][j][k >> 1][0] = f[i][j][k][t];
    19             }
    20     printf("%d
    ", f[n + 1][m][0][0]);
    21 }

    @Author: YouSiki

  • 相关阅读:
    Balanced Binary Tree
    Convert Sorted List to Binary Search Tree
    Convert Sorted Array to Binary Search Tree
    Binary Tree Zigzag Level Order Traversal
    Validate Binary Search Tree
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Maximum Depth of Binary Tree
    如何把U盘的两个盘或者多个盘合成一个
    bugku 想蹭网先解开密码
  • 原文地址:https://www.cnblogs.com/yousiki/p/6269849.html
Copyright © 2011-2022 走看看