题解 [JXOI2012]奇怪的道路
考场上我坚持认为这是个组合数题。。。
看到\(k\leq8\)我想状压来着,但是不知道怎么压
实际上,对于点i和点j的连边(\(j\in[i-k, i-1]\))只有连或不连两种状态
而如果i与比j编号小的点连边的情况已经考虑完了,方案数就可以连带下来,如此就可以建立转移
令\(dp[i][j][s][l]\)为在点i,连了j条边,点i-k到点i之间的点已连边数的奇偶性压成s,此时从前向后连带到第\(i-k+l\)个点
i与每个点都是连或不连两种状态,则正序枚举l,使\(dp[i][j][s][max(0, k-i)]\)为初始状态
则连带过程:
\(dp[i][j][s][l+1] += dp[i][j][s][l]\) (i与j不连边)
\(dp[i][j+1][s^(1<<(k-l))^1][l] += dp[i][j][s][l]\) (i与j连边)
注意这里\(l\in[0, k-1]\),但为了方便写成了\(l\in[0, k]\),
当\(i==k\)时考虑从第i个点转移到第i+1个点,但只有第i-k个点连边为偶数时可以转移。
\(dp[i+1][j][s<<1][max(0, k-i)] += dp[i][j][s][k]\)
Code:
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define N 32
#define ll long long
#define ld long double
#define usd unsigned
#define ull unsigned long long
//#define int long long
int n, m, k;
ll dp[N][N][1<<9][9];
const ll p=1e9+7;
inline void mod(ll& a, ll b) {a+=b; if (a>=p) a-=p;}
signed main()
{
#ifdef DEBUG
freopen("1.in", "r", stdin);
#endif
scanf("%d%d%d", &n, &m, &k);
int lim = 1<<(k+1);
dp[1][0][0][k] = 1;
for (int i=1,cnt,s2; i<=n; ++i)
for (int j=0; j<=m; ++j)
for (int s=0; s<lim; ++s)
for (int l=0; l<=k; ++l) {
if (i-k+l <= 0) continue;
cnt=0; s2=s;
while (s2) {++cnt; s2&=(s2-1);}
//if (cnt>j*2) continue;
//if (dp[i][j][s][l]) cout<<i<<' '<<j<<' '<<s<<' '<<l<<' '<<cnt<<endl;
if (l==k) {
if (!(s&(1<<k))) mod(dp[i+1][j][s<<1][max(0, k-i)], dp[i][j][s][k]);
}
else {
//if (dp[i][j][s][l]) cout<<i<<' '<<j<<' '<<s<<' '<<l<<' '<<cnt<<endl;
mod(dp[i][j+1][s^(1<<(k-l))^1][l], dp[i][j][s][l]);
mod(dp[i][j][s][l+1], dp[i][j][s][l]);
//if (dp[i][j][s][l]) {
//cout<<dp[i][j+1][s^(1<<(k-l))^1][l+1]<<endl;
//cout<<bitset<10>(s^(1<<(k-l))^1)<<endl;
//}
}
//if (i==2) printf("dp[%d][%d][%d][%d]=%lld\n", i, j, s, l, dp[i][j][s][l]);
}
printf("%lld\n", dp[n][m][0][k]);
return 0;
}
题解 [JXOI2012]奇怪的道路的更多相关文章
- bzoj 3195 [Jxoi2012]奇怪的道路
3195: [Jxoi2012]奇怪的道路 Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座城市,编 ...
- [BZOJ3195][Jxoi2012]奇怪的道路
3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec Memory Limit: 128 MB Description 小宇从历史书上了解到一个古老的文明.这个文明在各个 ...
- 【BZOJ3195】[Jxoi2012]奇怪的道路 状压DP
[BZOJ3195][Jxoi2012]奇怪的道路 Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座 ...
- [补档][Jxoi2012] 奇怪的道路
[Jxoi2012] 奇怪的道路 题目 传送门 :http://www.lydsy.com/JudgeOnline/problem.php?id=3195 小宇从历史书上了解到一个古老的文明.这个文明 ...
- 【BZOJ】3195: [Jxoi2012]奇怪的道路【状压/奇偶性】【思路】
3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 802 Solved: 529[Submit][Statu ...
- 3195: [Jxoi2012]奇怪的道路
3195: [Jxoi2012]奇怪的道路 链接 思路: 因为一个点只会和它前后k个点连边,所以,记录下每个点的前k个点和它自己(共k+1个点)的状态,1表示奇数,0表示偶数. dp[i][j][s] ...
- BZOJ3195:[JXOI2012]奇怪的道路——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3195 Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方 ...
- [Jxoi2012]奇怪的道路 题解(From luoguBlog)
题面 状压好题 1<= n <= 30, 0 <= m <= 30, 1 <= K <= 8 这美妙的范围非状压莫属 理所当然地,0和1代表度的奇偶 dp[i][j ...
- 【bzoj3195】【 [Jxoi2012]奇怪的道路】另类压缩的状压dp好题
(上不了p站我要死了) 啊啊,其实想清楚了还是挺简单的. Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期 ...
随机推荐
- 32. Longest Valid Parentheses **堆栈
description: Given a string containing just the characters '(' and ')', find the length of the longe ...
- Nacos配置中心功能
目录 Nacos的配置管理模型 命名空间(Namespace) 配置分组(Group) 配置集(Data ID) 配置项 一个最佳实践 命名空间管理 配置管理 参考 Nacos的配置管理模型 对于Na ...
- Activiti7 与 Spring Boot 及 Spring Security 整合 踩坑记录
1. 前言 实话实说,网上关于Activiti的教程千篇一律,有参考价值的不多.很多都是老早以前写的,基本都是直接照搬官方提供的示例,要么就是用单元测试跑一下,要么排除Spring Security ...
- dataX windows10安装
按照视频课程,从Github上下载文件:https://github.com/alibaba/DataX 然后将下载的压缩包解压即可,不过需要的前提Python环境是要求python2,于是在pyth ...
- SpringBoot整合Shiro实现权限控制
目录 1.SpringBoot整合Shiro 1.1.shiro简介 1.2.代码的具体实现 1.2.1.Maven的配置 1.2.2.整合需要实现的类 1.2.3.项目结构 1.2.4.ShiroC ...
- apt-key Debian packages密钥管理命令
adv子命令 Pass advanced options to gpg. With adv --recv-key you can e.g. download key from keyservers ...
- 单细胞分析实录(18): 基于CellPhoneDB的细胞通讯分析及可视化 (上篇)
细胞通讯分析可以给我们一些细胞类群之间相互调控/交流的信息,这种细胞之间的调控主要是通过受配体结合,传递信号来实现的.不同的分化.疾病过程,可能存在特异的细胞通讯关系,因此阐明这些通讯关系至关重要. ...
- tensorflow2 自定义损失函数使用的隐藏坑
Keras的核心原则是逐步揭示复杂性,可以在保持相应的高级便利性的同时,对操作细节进行更多控制.当我们要自定义fit中的训练算法时,可以重写模型中的train_step方法,然后调用fit来训练模型. ...
- jmeter测试流程整理
背景 整理jmeter脚本编写流程,注意事项,常用组件,常见问题. 参看链接:https://www.cnblogs.com/pwj2lgx/p/10282422.html 参看:processOn思 ...
- Bootstrap框架--DataTables列表示例--添加判断
一.参考代码 <%@ include file="./include/header.jsp"%> <!-- jquery.dataTables.css --> ...