bzoj 3195 奇怪的道路
Written with StackEdit.
Description
小宇从历史书上了解到一个古老的文明。这个文明在各个方面高度发达,交通方面也不例外。考古学家已经知道,这个文明在全盛时期有\(n\)座城市,编号为\(1..n\)。\(m\)条道路连接在这些城市之间,每条道路将两个城市连接起来,使得两地的居民可以方便地来往。一对城市之间可能存在多条道路。
据史料记载,这个文明的交通网络满足两个奇怪的特征。首先,这个文明崇拜数字\(K\),所以对于任何一条道路,设它连接的两个城市分别为\(u\)和\(v\),则必定满足\(1 <=|u - v| <= K.\)此外,任何一个城市都与恰好偶数条道路相连(\(0\)也被认为是偶数)。不过,由于时间过于久远,具体的交通网络我们已经无法得知了。小宇很好奇这\(n\)个城市之间究竟有多少种可能的连接方法,于是她向你求助。
方法数可能很大,你只需要输出方法数模\(10^9+7\)后的结果。
Input
输入共一行,为\(3\)个整数\(n,m,K\)。
Output
输出\(1\)个整数,表示方案数模\(10^9+7\)后的结果。
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.\)
两种可能的连接方法不同当且仅当存在一对城市,它们间的道路数在两种方法中不同。
在交通网络中,有可能存在两个城市无法互相到达。
Solution
- \(K\)的范围较小,考虑设计状态数目与\(K\)有关的状压\(dp\).
- \(f[i][j][S][l]\)表示考虑到第\(i\)个点,使用了\(j\)条边.
- \(S\)只用压缩\(i-k\)~\(i\)的度数奇偶性,因为前面的点是无法再被连边的.
- \(l\)表示当前处理\(i\)向\(i-l\)连边.
- 那么枚举\(i,j,S,l\),按照状态定义连边或不连边转移.
#include<bits/stdc++.h>
using namespace std;
typedef long long LoveLive;
inline int read()
{int out=0,fh=1;char jp=getchar();while ((jp>'9'||jp<'0')&&jp!='-')jp=getchar();if (jp=='-'){fh=-1;jp=getchar();}while (jp>='0'&&jp<='9'){out=out*10+jp-'0';jp=getchar();}return out*fh;
}
const int P=1e9+7;
inline int add(int a,int b)
{return (a+b) % P;
}
inline int mul(int a,int b)
{return 1LL * a * b % P;
}
const int MAXN=32,MAXK=10;
int n,m,k;
int f[MAXN][MAXN][1<<MAXK][MAXK];
int main()
{n=read(),m=read(),k=read();f[1][0][0][1]=1;for(int i=1;i<=n;++i){for(int j=0;j<=m;++j){for(int s=0;s<(1<<(k+1));++s){for(int l=1;l<=k;++l)//从i向i-l连边.避免重复计数 {int res=f[i][j][s][l];f[i][j][s][l+1]=add(f[i][j][s][l+1],res);//不连边直接转移 if(l<=i-1){int news=s^(1<<k)^(1<<(k-l));f[i][j+1][news][l]=add(f[i][j+1][news][l],res);}}if((s&1)==0)//度数为偶,符合条件,不再考虑 f[i+1][j][s>>1][1]=add(f[i+1][j][s>>1][1],f[i][j][s][k]);}}}printf("%d\n",f[n][m][0][k]);return 0;
}
转载于:https://www.cnblogs.com/jklover/p/10062171.html
bzoj 3195 奇怪的道路相关推荐
- BZOJ 3195: [Jxoi2012]奇怪的道路 | 状压DP
不是我吹牛逼 想了1min就想出来的题真是 超水的 题太简单了 解释就不解释了 #include<cstdio> #define P 1000000007 using namespace ...
- 状压[Jxoi2012]奇怪的道路
小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座城市,编号为1-n.m条道路连接在这些城市之间,每条道路将两个城市连接起来, ...
- bzoj3195 [Jxoi2012]奇怪的道路
Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有 \(n\) 座城市,编号为 \(1\cdots n\) ...
- [BZOJ 2756] 奇怪的游戏
Link:https://www.lydsy.com/JudgeOnline/problem.php?id=2756 Algorithm: 比较新颖的题目 首先发现是对矩阵中相邻两数进行操作 & ...
- [BZOJ 2200][Usaco2011 Jan]道路和航线 spfa+SLF优化
Description Farmer John正在一个新的销售区域对他的牛奶销售方案进行调查.他想把牛奶送到T个城镇 (1 <= T <= 25,000),编号为1T.这些城镇之间通过R条 ...
- 【bzoj 2435】[Noi2011]道路修建(dfs)
2435: [Noi2011]道路修建 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3505 Solved: 1167 [Submit][Sta ...
- bzoj 2756奇怪的游戏
2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec Memory Limit: 128 MB Submit: 2571 Solved: 685 [Submit][St ...
- bzoj3195 [Jxoi2012]奇怪的道路——状压DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3195 看到数据范围就应该想到状压呢... 题解(原来是这样):https://www.cnb ...
- [BZOJ 2500] 幸福的道路
照例先贴题面(汪汪汪) 2500: 幸福的道路 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 368 Solved: 145 [Submit][S ...
最新文章
- java中volatile_Java中Volatile关键字详解
- 工具 - 硕思SWF Decompiler5.3Build528 含补丁
- Spring-AOP 混合使用各种切面类型及不同切面总结
- Properties文件的XML格式
- 对于个人(注册表)与团队(团队表)(两张表没有关联)的展示与可空判断
- 关于UML中逻辑模型的工具的详细介绍
- 离开北上广的互联网工程师最终都去了哪里?
- Top 100 good english words
- 零基础学启发式算法(5)-遗传算法 (Genetic Algorithm)
- 记:用notepad2替换系统自带记事本notepad
- 全15期BIM等级考试解析(内附考试秘籍)
- 《自拍教程74》Python 假装企业微信电脑在线并定时关机,骗老板的好方法!
- ios ipa分析之 .dSYM 文件、.xcarchive 文件和 Link Map 文件的Mac版本分析工具:MKAppTool
- nginx配置多个域名转向80端口
- 2022姓氏头像在线制作小程序源码+头像模块
- 亲情友情爱情:《悲惨世界》第四部《卜吕梅街的柔情和圣德尼街的史诗》/人性:《悲惨世界》第五部《冉阿让》摘录...
- 什么是贪婪型人格?如何改变贪婪的性格?
- 社群运营怎么做更有效?
- 2021-2022-1 20212820《Linux内核原理与分析》第一周作业
- Visual C++游戏编程基础之多背景循环动画