bzoj-3195-状压dp
3195: [Jxoi2012]奇怪的道路
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 600 Solved: 395
[Submit][Status][Discuss]
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.
【题目说明】
两种可能的连接方法不同当且仅当存在一对城市,它们间的道路数在两种方法中不同。
在交通网络中,有可能存在两个城市无法互相到达。
Source
f[i][j][s][l]表示进行到第i个点,s-k之前均为合法,已经连了j条边,[i-k,i]的奇偶状态为s,正在处理i与s-l的连边的方案个数。初始化f[1][0][0][0]=1,从左至右枚举左端点,f[i][j][s][l]->f[i][j][s][l-1],f[i][j][s][l]->f[i][j+1][s'][l] ,s'就是把<i,i-l>连上一条边的状态。f[i][j][s][0]->f[i+1][j][s<<1][k] | s的最高位是0,表示最左边为偶数态。
感觉维数太多很难想通。
#include<bits/stdc++.h>
using namespace std;
const int MOD=1e9+;
int f[][][(<<)][];
int main(){
int n,m,k,i,j;
scanf("%d%d%d",&n,&m,&k);
int all=(<<(k+))-;
f[][][][]=;
for(i=;i<=n+;++i){
for(j=;j<=m;++j){
for(int s=;s<=all;++s){
for(int l=min(k,i-);l>=;l--){
if(f[i][j][s][l]){
f[i][j][s][l-]+=f[i][j][s][l]%=MOD;
f[i][j+][s^^(<<l)][l]+=f[i][j][s][l]%=MOD;
}
}
if((s&(<<k))==){
f[i+][j][s<<][min(k,i)]+=f[i][j][s][]%=MOD;
}
}
}
}
cout<<f[n][m][][]<<endl;
return ;
}
bzoj-3195-状压dp的更多相关文章
- bzoj 1879 状压dp
879: [Sdoi2009]Bill的挑战 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 852 Solved: 435[Submit][Status ...
- bzoj 1087 状压dp
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4130 Solved: 2390[Submit][ ...
- BZOJ 2064 - 状压DP
传送门 题目大意: 给两个数组, 数组中的两个元素可以合并成两元素之和,每个元素都可以分裂成相应的大小,问从数组1变化到数组2至少需要多少步? 题目分析: 看到数据范围\(n<=10\), 显然 ...
- BZOJ 4057 状压DP
思路: 状压一下 就完了... f[i]表示选了的集合为i 转移的时候判一判就好了.. //By SiriusRen #include <cstdio> #include <cstr ...
- BZOJ 4565 状压DP
思路: f[i][j][S]表示从i到j压成S状态 j-m是k-1的倍数 $f[i][j][S<<1]=max(f[i][j][S<<1],f[i][m-1][S]+f[m][ ...
- bzoj 1072状压DP
1072: [SCOI2007]排列perm Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2293 Solved: 1448[Submit][St ...
- bzoj 1072 状压DP
我们用w[i][j]来表示,i是一个二进制表示我们选取了s中的某些位,j表示这些位%d为j,w[i][j]则表示这样情况下的方案数,那么我们可以得到转移.w[i|(1<<k)][(j*10 ...
- bzoj 2669 状压DP
因为最多有8个'X',所以我们可以用w[i][s]来表示现在我们填了前i个数,填的X的为S,因为每次新加进来的数都不影响前面的最小值,所以我们可以随便添加,这样就有了剩下所有位置的方案,每次都这样转移 ...
- bzoj 1076 状压DP
我们设w[i][s]为当前到第i关,手中的物品为s的时候,期望得分为多少,其中s为二进制表示每种物品是否存在. 那么就比较容易转移了w[i][s]=(w[i-1][s']+v[j]) *(1/k),其 ...
- BZOJ 1231 状压DP
思路: f[i][j] i表示集合的组成 j表示选最后一个数 f[i][j]表示能选的方案数 f[i|(1<< k)][k]+=f[i][j]; k不属于i j属于i且符合题意 最后Σf[ ...
随机推荐
- java 中的& &&区别以及 C++ 中& &&的区别
java中的 & &&两个运算符 (1).&在java中称做: 逻辑与 判断boolean类型,只有两者都是true时,才会返回true 举例: boolean b1= ...
- 设计模式之——Chain of Responsibility
Chain of Responsibility模式又叫做责任链模式,是将多个对象组成一条职责链,然后按照职责链上的顺序一个一个的找出是谁来负责处理. 这个模式很简单,下面就是一个实例程序,有六个处理器 ...
- Django中URL的解析和反查
add by zhj: 如果想用reverse(namespace1:namespace2:...:namespaceN:name)反查url(注意:用reverse('polls:index')方法 ...
- 第1章 1.10计算机网络概述--OSI参考模型和TCP_IP协议
传输层负责将大数据文件分段,变成数据段. 网络层负责为小分段加上IP地址,变成数据包. 数据链路层负责将数包加上MAC地址和校验值,变成数据帧. TCP/IP协议是一群协议.不只是2个协议.
- (1.5)DML增强功能-try catch及事务控制
一.事务控制与Try Catch结合 当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚. 当 SET XACT_ABORT ...
- 搭建markdown图床-腾讯云COS
背景介绍 书写markdown笔记时,如何处理图片,实在是有些棘手的问题.每一张图都保存在当前文件夹? 每张图都自己重命名?每次上传到cnblogs博客都需要一张一张拖动?markdown已经非常成功 ...
- Spring—Ioc
IoC容器,最主要的就是完成对象的创建以及维护对象的依赖关系等. 所谓控制反转,包括两部分:一是控制,二是反转,就是把传统方式需要由代码来实现对象的创建.维护对象的依赖关系,反转给容器来帮忙管理和实现 ...
- hdu5021 树状数组+二分
这 题 说 的 是 给 了 一 个 K—NN 每次查询离loc 最近的k个数 然后将这k个数的权值加起来除以k 赋值给 loc 这个位置上的 权值 我说说 我的做法 假如 查询的是loc 这个 ...
- Jsuop Whitelist
Jsuop使用示例代码 使用jsoup HTML Cleaner 方法进行清除,但需要指定一个可配置的 Whitelist.http://jsoup.org/apidocs/org/jsoup/saf ...
- 将vi打造成IDE
一.环境 发行版:Ubuntu 18.04 LTS 代号:bionic 内核版本:4.15.0-33-generic 二.步骤 2.1 准备工作 sudo apt-get install python ...