博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj3195: [Jxoi2012]奇怪的道路
阅读量:6598 次
发布时间:2019-06-24

本文共 2156 字,大约阅读时间需要 7 分钟。

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 197  Solved: 122
[][][]

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

Source

                        
[][][]
题解:
  
  可以把图中的点看成一列数,在这列数中连边,搞DP。
  用f[i][j][s][c]表示处理到第i个点,共用j条边,(i-k)~i 这些点度的奇偶性为二进制数s,当前处理的连边为 i 到 i - k + c 的方案数
  对于c < k,若连边,则可以转移到f(i, j + 1, s', k);若不连边,则可以转移到f(i, j, s, k + 1)。
  对于c = k,只有当i - k的度为偶数才可以转移到f(i + 1, j, s', 0)。
  时间复杂度O(NMK * 2^K)。   比较难理解,具体看代码:
1 #include
2 using namespace std; 3 const int mod=1000000007; 4 inline int read(){ 5 int x=0,f=1;char ch=getchar(); 6 while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;ch=getchar();} 7 while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} 8 return x; 9 }10 int N,M,K;11 int f[35][35][1025][9];//f[i][j][s][c]表示处理到第i个点,共用j条边,12 //第三维表示(i-k)~i这些点度的奇偶性为二进制数s,0表示偶数,1表示奇数13 //当前处理的连边为(i,i-k+c)的方案数。14 int main(){15 N=read(),M=read(),K=read();16 f[2][0][0][0]=1;17 for(int i=2;i<=N;++i){
//枚举第i个点 18 for(int j=0;j<=M;++j){
//已经连了j条边 19 for(int s=0;s<(1<<(K+1));++s){
//0~2^(l+1)-1 包含i本身 20 for(int c=0;c
=1){25 f[i][j+1][s^(1<
<
>1][0]=f[i][j][s][K];//第i个点连了偶数条边可以直接给 i+1,33 //s>>1相当于除掉了第i个点 34 }35 }36 }37 printf("%d",f[N+1][M][0][0]);38 return 0;39 }

 

 
 

转载于:https://www.cnblogs.com/CXCXCXC/p/5093584.html

你可能感兴趣的文章
年终回顾,为你汇总一份「后端架构技术清单」
查看>>
别人的双11 & 程序员的双11~
查看>>
互联网垂直社交创业新形态——ThinkSNS
查看>>
C#中两个冒号(::)的作用
查看>>
sed指定行范围匹配(转贴!)
查看>>
如何在tomcat下用EL表达式${param.xxx}属性获取parameter中文避免乱码
查看>>
线性表之栈与队列
查看>>
Git撤销修改
查看>>
项目管理实施流程(八)系统运维
查看>>
ipv4及ipv6及tcp的头部结构
查看>>
win7图片目录位置
查看>>
Maven
查看>>
paste用法
查看>>
《java开发实战经典》读书笔记——第3章 Java基础程序设计之数据类型划分20151026...
查看>>
C. Tanya and Toys_模拟
查看>>
JS实例(一)百度前端技术学院任务(十三)
查看>>
DEBUG(2)--函数的输入参数要做适当的检查
查看>>
js适配器模式
查看>>
xocde7下导入libsqlite3.tbd编译报错的解决办法
查看>>
吴忠军人民微博主页
查看>>