3195: [Jxoi2012]奇怪的道路

Time Limit: 10 Sec  Memory Limit: 128 MB

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.

【题目说明】两种可能的连接方法不同当且仅当存在一对城市,它们间的道路数在两种方法中不同。在交通网络中,有可能存在两个城市无法互相到达。

题解:

考试的时候我真的没有想到……看到了数据范围比较小,但是我想的是深搜而不是状压……

我们发现k的数据范围很小,所以我们考虑状压,首先考虑状态数组定义。

首先,f数组肯定有2维表示枚举到的点数和边数。我们发现,题目中对每个点的奇偶性有限制,而奇偶是两种相反的概念,

因此我们尝试再用一位表示可以和这个点连边的点的出度奇偶性状态,1表示奇;但是我们发现,如果这个设置为所有它能转移到的点的奇偶性(一共16位),

不仅时间复杂度变大,转移时候的讨论也会很复杂,而我们考虑一下,其实只弄一边的状态就可以了,从现在的点往后转移相当于从后面的点往前转移

因此我们只保存i点以及前面k个点的状态即可,我们再设置一维l,表示我们已经考虑到了前面k+1个点中的第l个点(我们设高位离着i点最近,第0位是点i-k,第k位是i点,一共k+1位)

于是我们得到了一个四维的状态数组,f[35][35][(1<<9)[10],接下来我们考虑转移

考虑对第i-k+l个点与第i个点,如果我们不再加边,就直接转移到下一个f[i][j][state][l+1]

如果我们再还合法的情况下加边,会同时改变i点和i-k+l这两个的出度奇偶性,也就是转移到f[i][j+1][state^(1<<k)^(1<<l)][l]

然后我们考虑不同i之间的转移。如果当前状态要转移的话,我们现在第i-k个点永远不会再被考虑,因此转移的前提之一是第i-k位奇偶性是0,即state&1==0

并且,我们还可以发现一个很有用的性质:对于点i+1,它初始state就是第i个点的state>>1,这一点很显然,从我们第3维的定义中就能看出这一操作可以实现

这样的话,就有跨第一维的转移,即向f[i+1][j][u>>1][0]转移

再最后的时候,输出f[n+1][m][0][0]即可,代码见下:

 #include <cstdio>
#include <cstring>
using namespace std;
typedef long long LL;
const LL mod=;
int n,m,k,bin[],f[][][(<<)+][];
int main()
{
scanf("%d%d%d",&n,&m,&k);
bin[]=;for(int i=;i<=;i++)bin[i]=bin[i-]<<;
f[][][][]=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int u=;u<bin[k+];u++)
{
for(int l=;l<k;l++)
if(f[i][j][u][l])
{
(f[i][j][u][l+]+=f[i][j][u][l])%=mod;
if(j<m&&i-k+l>)
(f[i][j+][u^bin[k]^bin[l]][l]+=f[i][j][u][l])%=mod;
}
if((u&)==&&f[i][j][u][k])
f[i+][j][u>>][]=f[i][j][u][k];
}
printf("%d",f[n+][m][][]);
}

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

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

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

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

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

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

    传送门 f[i][j][k]f[i][j][k]f[i][j][k]表示前iii个点连了jjj条边,第i−K+1i-K+1i−K+1~iii个点连边数的奇偶性为kkk时的方案数. 转移规定只能从后向前 ...

  4. bzoj3195 [Jxoi2012]奇怪的道路——状压DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3195 看到数据范围就应该想到状压呢... 题解(原来是这样):https://www.cnb ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. vue 与原生app的对接交互(混合开发)

    小伙伴们在用vue开发h5项目特别是移动端的项目,很多都是打包后挂载在原生APP上的,那就少不了与原生交互了,我最近就是在坐这个,踩了一些坑,拿出来给大家分享下. 0.通过url传输数据:(一般是在入 ...

  2. cogs2109 [NOIP2015] 运输计划

    cogs2109 [NOIP2015] 运输计划 二分答案+树上差分. STO链剖巨佬们我不会(太虚伪了吧 首先二分一个答案,下界为0,上界为max{路径长度}. 然后判断一个答案是否可行,这里用到树 ...

  3. Sublime Text3.0的安装

    Sublime Text是一款轻量级的易于使用的前端编写软件,个人比较推荐. 找到Sublime的官网,下载对应的版本后,点击安装.安装完成后需要下载相应的插件才能进行更加 有效率的开发工作.编写前端 ...

  4. Jmeter使用HTTP代理服务器录制脚本

    使用Jmeter录制脚本通常使用Badboy工具录制或者Jmeter自带的HTTP代理服务器录制脚本,这里说一下使用HTTP代理服务器录制时遇到的问题. 1.  Jmeter安装 下载得到Jmeter ...

  5. WebGL射线拾取模型——八叉树优化

    经过前面2篇WebGL射线拾取模型的文章,相信大家对射线和模型面片相交的原理已经有所了解,那么今天我们再深入探究关于射线拾取的一个问题,那就是遍历场景中的所有与射线相交的模型的优化问题.首先我们来复习 ...

  6. Siki_Unity_2-3_UGUI_Unity4.6 UI Beta版本入门学习(未学)

    Unity 2-3 UGUI Unity4.6 UI Beta版本入门学习(未学)

  7. Redis的数据类型以及每种数据类型的使用场景

    人就是很奇怪的动物,很简单的问题往往大家都容易忽略,当我们在使用分布式缓存Redis的时候,一个最简单的问题Redis的数据类型以及每种数据类型的使用场景是什么? 是不是觉得这个问题很基础?我也这么觉 ...

  8. openstack golang sdk使用

    1. go get github.com/gophercloud/gophercloud import ( "github.com/gophercloud/gophercloud" ...

  9. Activity 在横竖屏切换情况下的生命周期变化

    title: Activity 在横竖屏切换情况下的生命周期变化 date: 2018-04-26 23:05:57 tags: [Activity] categories: [Mobile,Andr ...

  10. Alpha发布—文案+美工展示

    目录 团队简介 项目进展 组内分工 队员总结 后期计划 一.团队简介 二.项目进展 从选题发布到今天的Alpha发布,我们团队经历了许许多多的磨难.我们最终设计了如下的功能:首页.班级.个人.更多.打 ...