[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. 10亿美元融资腾讯跟头,Grail要用基因测序做癌症早期筛查

    癌症超早期筛查:"在干草堆中寻找缝衣针"癌症是人类的噩梦,尤其是中晚期癌症,但很多时候,当患者感觉到身体不适而去医院检查时,病情都已经到了中晚期,很难治愈.而有研究表明,早期癌症患 ...

  2. 用removeLast和removeFrist来模仿堆和栈

    /* *在大不久前,我决定自学Java,关注了很多的公众号.微博等.没几天我看到一个笑话: *晚上孩子哭了,老婆让我去看看. *我说:"不行,咱们的床是队列,你先上的床就得你先下床... * ...

  3. Java 9 揭秘(6. 封装模块)

    Tips 做一个终身学习的人. 在这章节中, 主要介绍以下内容: 封装Java模块的不同格式 JAR格式增强 什么是多版本JAR 如何创建和使用多版本JAR JMOD是什么格式 如何使用jmod工具来 ...

  4. java基础回顾(五)线程详解以及synchronized关键字

    本文将从线程的使用方式.源码.synchronized关键字的使用方式和陷阱以及一些例子展开java线程和synchronized关键字的内容. 一.线程的概念 线程就是程序中单独顺序的流控制.线程本 ...

  5. [leetcode-495-Teemo Attacking]

    In LLP world, there is a hero called Teemo and his attacking can make his enemy Ashe be in poisoned ...

  6. 从Java熟练到Android入门

    刚刚从学校出来,唉,从Java转入Android. 当初老师告诉我们Android不重要,结果,Android的所有课不是在玩手机就是在说话,没认真听也没认真看,作业也没认真做,现在想想好后悔啊,以至 ...

  7. 【summary】JQuery 相关css、ajax、数据操作函数或方法

    总结一下JQuery常用的函数方法,更加系统的整理一下. JQuery遍历的一些函数: 函数 描述 .add() 将元素添加到匹配元素的集合中. .andSelf() 把堆栈中之前的元素集添加到当前集 ...

  8. Linux内核互斥锁--mutex

    一.定义: /linux/include/linux/mutex.h   二.作用及访问规则: 互斥锁主要用于实现内核中的互斥访问功能.内核互斥锁是在原子 API 之上实现的,但这对于内核用户是不可见 ...

  9. python编程快速上手之第9章实践项目参考答案

    本章介介绍了shutil,zipfile模块的使用,我们先来认识一下这2个模块吧. 一.shutil模块 shutil模块主要用于对文件或文件夹进行处理,包括:复制,移动,改名和删除文件,在shuti ...

  10. Java开源博客My-Blog之docker组件化修改

    前言 5月13号上线了自己的个人博客,<Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦>,紧接着也在github上开源了博客的代码,到现在为 ...