[Jxoi2012] 奇怪的道路

题目

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

INPUT

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

OUTPUT

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

SAMPLE

INPUT1

3 4 1

OUTPUT1

3

INPUT2

4 3 3

OUTPUT2

4

解题报告

  考试时候想到了DP,一看数据范围也想到了状压,然而就是不会打,果然我DP就是弱啊- -
正解:
  仍然考虑状压,将i-K到i的度的奇偶性压成一维,设f[i][j][k][l]表示到点i,用了j条边,i-K的奇偶性状态为k,当前处理i-K+l和i之间的连边。
  如果这条边不连,可以转移到f[i][j][k][l+1].
  如果这条边连,可以转移到f[i][j][k^(1<<K)^(1<<l)][l].
  如果l=K并且i-K的度为偶数,可以转移到f[i+1][j][k>>1][0];
  最后答案就是f[n+1][m][0][0];
  需要注意的是特判,当你决定这条边需要连的时候,你需要判断这条边是否合法,因为我们是确定i,然后从i前面的点转移过来的,所以很有可能出现不合法的边,比如你当前的i为4,而你的K为8,那么你很有可能走到从-2转移过来的边,这显然是不合法的。还有,我们要枚举的是i前面的点,所以当你枚举的点>=i时,也是不合法的
  

 #include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int mod();
int n,m,k;
int st;
int bin[];
int f[][][<<][];
int main(){
bin[]=;
for(int i=;i<=;i++)
bin[i]=bin[i-]<<;
scanf("%d%d%d",&n,&m,&k);
st=bin[k+]-;
f[][][][]=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int o=;o<=st;o++)
for(int l=;l<=k;l++){
if(l==k&&!(o&)){
f[i+][j][o>>][]+=f[i][j][o][l];
f[i+][j][o>>][]%=mod;
}
f[i][j][o][l+]+=f[i][j][o][l];
f[i][j][o][l+]%=mod;
if(j<m&&i-k+l>&&i-k+l<i){
f[i][j+][o^bin[k]^bin[l]][l]+=f[i][j][o][l];
f[i][j+][o^bin[k]^bin[l]][l]%=mod;
}
}
printf("%d",f[n+][m][][]);
}
这么短的码,然而自己没思路,也不能怪谁= =

[补档][Jxoi2012] 奇怪的道路的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. BZOJ3195:[JXOI2012]奇怪的道路——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=3195 Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方 ...

  8. bzoj3195: [Jxoi2012]奇怪的道路(状压dp)

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

  9. 【bzoj3195】【 [Jxoi2012]奇怪的道路】另类压缩的状压dp好题

    (上不了p站我要死了) 啊啊,其实想清楚了还是挺简单的. Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期 ...

随机推荐

  1. java源码学习(四)ArrayList

    ArrayList ​ ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ​ ArrayList不是线程安全的,只能用在单线程环境下, ...

  2. 愚公oracle数据库同步工具

    最近,利用一些时间对oracle数据库实时同步工具做了一些调研分析,主要关注了linkedin的databus和阿里的yugong两个中间件,其中databus需要在每个待同步的表上增加额外的列和触发 ...

  3. web开发中前后端传值

    在JavaScript中,页面与页面间的传值需要注意. 比如,我们通过url向下个页面进行传一个数字时,到下个页面进行解析出来后可能是一个字符串.这样会导致一个现象.调试时,发现我要传的值的确传过来了 ...

  4. Centos6.5 源码编译安装 Mysql5.7.11及配置

    安装环境 Linux(CentOS6.5 版).boost_1_59_0.tar.gz.mysql-5.7.11.tar.gzMySQL 5.7主要特性:    更好的性能:对于多核CPU.固态硬盘. ...

  5. DOM 和 BOM 的 对象 和方法

    DOM   对象 有 documet  event element  attlibute 方法  getElementById   getElementsBytagname  getElementsB ...

  6. 一个"2-SUM"问题

    题目要求: Download the text file here. (Right click and save link as). The goal of this problem is to im ...

  7. 【Android Developers Training】 38. 文件共享需求

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  8. NPOI 生成 excel基本设置

    //设置页眉页脚 tempSheet.Header.Center = "2017-04-27"; tempSheet.Footer.Center = "√" + ...

  9. Linux 重启和关机命令

    shutdown -r  05:30   在凌晨五点30分关机     shutdown -r  05:30 &     后台执行     shutdown -c    取消前一个关机命令   ...

  10. CSS使用心得小结

    CSS心得 最近对CSS的使用有一些小心得,在此写下来给大家分享分享 .最后附上选择器的实例代码. ------DanlV CSS是什么 层叠样式表(英文全称:Cascading Style Shee ...