题目描述

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

输入

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

输出

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

提示

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

【题目说明】

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

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

样例输入

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

样例输出

【输出样例1】
3 【输出样例2】
4 【题解】 看到小数据居然也没往状压上想,只是想打个表骗分,试试打表的可行性。然后写了个dfs,放一边打表,不过表打得不够成功只搜出来1300+个结果,大概我在dfs里搜索的顺序还可以再好一些,人生第一次打表以25分圆满结束~
   这道题主要的限制是边的两端只能相差K,以及点的度必须为偶数。对于前者,采用回连的策略避免重复。对于后者,K只有8,将i-K到i的度的奇偶性压成1维。
设f[i][j][k][l]表示考虑到点i,用了j条边,i-K到i的奇偶性为k,当前处理i-K+l和i之间的连边。
如果这条边不连,可以转移到f[i][j][k][l+1].
如果这条边连,可以转移到f[i][j+1][k^(1<<K)^(1<<l)][l].(这里的亦或相当于改变奇偶性,注意j+1<=m&&i-K+l>=1)
如果l=K并且i-K的度为偶数,可以转移到f[i+1][j][k>>1][0];
最后答案就是f[n+1][m][0][0]; 模运算常数极大,适当减少模运算也是卡常的好办法。

 #include<iostream>
#include<cstdio>
using namespace std;
const int mod=;
int n,m,p,temp,f[][][(<<)+][];
int main()
{
scanf("%d%d%d",&n,&m,&p);
temp=(<<(p+))-;
f[][][][]=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int k=;k<=temp;k++)
{
for(int l=;l<p;l++)
if(f[i][j][k][l])
{
f[i][j][k][l+]=(f[i][j][k][l+]+f[i][j][k][l])%mod;
if(j+<=m&&i-p+l>=)
f[i][j+][k^(<<p)^(<<l)][l]=(f[i][j+][k^(<<p)^(<<l)][l]+f[i][j][k][l])%mod;
}
if((!(k&))&&f[i][j][k][p])
f[i+][j][k>>][]=f[i][j][k][p]%mod;
}
printf("%d",f[n+][m][][]);
return ;
}

road


												

奇怪的道路[JXOI2012]的更多相关文章

  1. [补档][Jxoi2012] 奇怪的道路

    [Jxoi2012] 奇怪的道路 题目 传送门 :http://www.lydsy.com/JudgeOnline/problem.php?id=3195 小宇从历史书上了解到一个古老的文明.这个文明 ...

  2. bzoj 3195 [Jxoi2012]奇怪的道路

    3195: [Jxoi2012]奇怪的道路 Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座城市,编 ...

  3. 【BZOJ】3195: [Jxoi2012]奇怪的道路【状压/奇偶性】【思路】

    3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 802  Solved: 529[Submit][Statu ...

  4. [BZOJ3195][Jxoi2012]奇怪的道路

    3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec  Memory Limit: 128 MB Description 小宇从历史书上了解到一个古老的文明.这个文明在各个 ...

  5. 【BZOJ3195】[Jxoi2012]奇怪的道路 状压DP

    [BZOJ3195][Jxoi2012]奇怪的道路 Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座 ...

  6. 3195: [Jxoi2012]奇怪的道路

    3195: [Jxoi2012]奇怪的道路 链接 思路: 因为一个点只会和它前后k个点连边,所以,记录下每个点的前k个点和它自己(共k+1个点)的状态,1表示奇数,0表示偶数. dp[i][j][s] ...

  7. 【BZOJ-3195】奇怪的道路 状压DP (好题!)

    3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 305  Solved: 184[Submit][Statu ...

  8. luogu P6239 奇怪的道路

    奇怪的道路 我看不出来是状压的状压 好吧,其实看到k的范围应该去往状压方面想的. 然后,题目中说"任何一个城市都与恰好偶数条道路相连(0也被认为是偶数)". 所以,奇偶,两种状态可 ...

  9. BZOJ3195: [Jxoi2012]奇怪的道路【状压DP】

    Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座城市,编号为1..n.m条道路连接在这些城市之间,每 ...

随机推荐

  1. 常用html标签的只读写法

    <a href="baidu.com" onclick="event.returnValue=false;">百度</a> a链接的只读 ...

  2. Tp框架获取客户端IP地址

    /** * 获取客户端IP地址 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字 * @return mixed */ function get_cl ...

  3. 日常API之百度翻译

    百度翻译是什么,可以吃吗?相信很多人都熟悉,它是我们生活中必不可少的一只东东. 但是,百度翻译开发平台只有每月只能翻译200万个字符,多出的要按照49.00/百万字符来算.对于我酱紫的乞丐程序员来说, ...

  4. htm5

    htm5在html4.0. xhtm1.0的基础上增加了音频.视频.拖拽等功能,不过,htmL5,还在完善中,不过大部分浏览器都已经支持了部分功能. 兼容性: 最新版本的 Safari.Chrome. ...

  5. (转载)MQ基本操作

    摘自:http://blog.sina.com.cn/s/blog_4892cf780100erga.html 一.MQ基本操作 MQ中有几个很重要的组件:队列管理器(QueueManager).队列 ...

  6. BufferedReaderTest

    package JBJADV003;import java.io.*;public class BufferedReaderTest { /** * @param args */ public sta ...

  7. VMwareTools安装失败提示找不到C headers和gcc目录

    在VMware虚拟机上安装好linux系统后,发现往往不能全屏,也不能设置共享文件夹进行文件共享,这时候可以通过安装VMwareTools这个工具来实现文件拖拽.共享和全屏. 安装的过程不再赘述,关键 ...

  8. jQuery选择器分类

    jQuery的基本选择器 选择器的分类 <!--1.基本选择器 2.层级选择器 3.过滤选择器 3.1 基本过滤选择器 3.2 内容过滤选择器 3.3 可见性过滤选择器 3.4 子元素过滤选择器 ...

  9. 面向对象15.3String类-常见功能-转换

    public static void main(String[] args) { //2.1// String s="张三,李四,王五";// String [] arr=s.sp ...

  10. jmeter-Java-MongoDB 数据库增删改查操作

    在日常测试过程中会发现有些测试数据是通过数据库来获取的,一般常用的数据比如SQL .Oracle,此类数据库jmeter有专门的插件进行使用JDBC,今天跟大家说一说关于Mongodb这个数据库jme ...