[BZOJ3195][Jxoi2012]奇怪的道路
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
3 4 1
【输入样例2】
4 3 3
Sample Output
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]奇怪的道路的更多相关文章
- BZOJ3195: [Jxoi2012]奇怪的道路【状压DP】
Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座城市,编号为1..n.m条道路连接在这些城市之间,每 ...
- bzoj3195: [Jxoi2012]奇怪的道路(状压dp)
Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座城市,编号为1..n.m条道路连接在这些城市之间,每 ...
- 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时的方案数. 转移规定只能从后向前 ...
- bzoj3195 [Jxoi2012]奇怪的道路——状压DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3195 看到数据范围就应该想到状压呢... 题解(原来是这样):https://www.cnb ...
- 【BZOJ3195】[Jxoi2012]奇怪的道路 状压DP
[BZOJ3195][Jxoi2012]奇怪的道路 Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座 ...
- 【BZOJ-3195】奇怪的道路 状压DP (好题!)
3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 305 Solved: 184[Submit][Statu ...
- [补档][Jxoi2012] 奇怪的道路
[Jxoi2012] 奇怪的道路 题目 传送门 :http://www.lydsy.com/JudgeOnline/problem.php?id=3195 小宇从历史书上了解到一个古老的文明.这个文明 ...
- bzoj 3195 [Jxoi2012]奇怪的道路
3195: [Jxoi2012]奇怪的道路 Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座城市,编 ...
- 【BZOJ】3195: [Jxoi2012]奇怪的道路【状压/奇偶性】【思路】
3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 802 Solved: 529[Submit][Statu ...
随机推荐
- 【转载】Direct3D纹理映射
原文:Direct3D纹理映射 更详细的文章:DirectX中的纹理映射相关技术 (转) 创建纹理对象 1: HRESULT CreateTexture( 2: UINT Width,//宽度 ...
- 【LG5022】[NOIP2018]旅行
[LG5022][NOIP2018]旅行 题面 洛谷 题解 首先考虑一棵树的部分分怎么打 直接从根节点开始\(dfs\),依次选择编号最小的儿子即可 而此题是一个基环树 怎么办呢? 可以断掉环上的一条 ...
- OpenStack入门篇(一)之云计算的概念
1.云计算 云计算是一种按使用量付费的模式,这种模式提供可用的.便捷的.按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少 ...
- svn 冲突处理
C:\workspace\test>svn upConflict discovered in 'test.txt'.Select: (p) postpone, (df) diff-full, ( ...
- 海思NB-IOT HI2115芯片电压域的问题
1. 先看模块引脚,利尔达NB86-G模块 2. VDD_IO_R1, VDD_IO_R2, VDD_IO_L1 and VDD_IO_L2 control the IO voltages on PI ...
- JS基础,课堂作业,相亲问答
相亲问答 <script> var a = prompt("你有房子么?"); var b = prompt("你有钱么?"); var c = p ...
- JMeter:全面的乱码解决方案【转】
本文是转自https://www.cnblogs.com/mawenqiangios/p/7918583.html 感谢分享者 中文乱码一直都是比较让人棘手的问题,我们在使用Jmeter的过程中, ...
- Windows下Mongodb安装部署
1.下载安装包 mongodb-win32-x86_64-enterprise-windows-64-3.6.4.zip 解压 安装失败(当前环境windows server2012 R2):已验证可 ...
- 408. Add Binary【LintCode java】
Description Given two binary strings, return their sum (also a binary string). Example a = 11 b = 1 ...
- Powershell按文件最后修改时间删除多余文件
Powershell按文件最后修改时间删除多余文件 1. 删除目录内多余文件,目录文件个数大于$count后,按最后修改时间倒序排列,删除最旧的文件. Sort-Object -Property La ...