考场上我坚持认为这是个组合数题。。。

看到\(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]奇怪的道路的更多相关文章

  1. bzoj 3195 [Jxoi2012]奇怪的道路

    3195: [Jxoi2012]奇怪的道路 Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座城市,编 ...

  2. [BZOJ3195][Jxoi2012]奇怪的道路

    3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec  Memory Limit: 128 MB Description 小宇从历史书上了解到一个古老的文明.这个文明在各个 ...

  3. 【BZOJ3195】[Jxoi2012]奇怪的道路 状压DP

    [BZOJ3195][Jxoi2012]奇怪的道路 Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座 ...

  4. [补档][Jxoi2012] 奇怪的道路

    [Jxoi2012] 奇怪的道路 题目 传送门 :http://www.lydsy.com/JudgeOnline/problem.php?id=3195 小宇从历史书上了解到一个古老的文明.这个文明 ...

  5. 【BZOJ】3195: [Jxoi2012]奇怪的道路【状压/奇偶性】【思路】

    3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 802  Solved: 529[Submit][Statu ...

  6. 3195: [Jxoi2012]奇怪的道路

    3195: [Jxoi2012]奇怪的道路 链接 思路: 因为一个点只会和它前后k个点连边,所以,记录下每个点的前k个点和它自己(共k+1个点)的状态,1表示奇数,0表示偶数. dp[i][j][s] ...

  7. BZOJ3195:[JXOI2012]奇怪的道路——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=3195 Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方 ...

  8. [Jxoi2012]奇怪的道路 题解(From luoguBlog)

    题面 状压好题 1<= n <= 30, 0 <= m <= 30, 1 <= K <= 8 这美妙的范围非状压莫属 理所当然地,0和1代表度的奇偶 dp[i][j ...

  9. 【bzoj3195】【 [Jxoi2012]奇怪的道路】另类压缩的状压dp好题

    (上不了p站我要死了) 啊啊,其实想清楚了还是挺简单的. Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期 ...

随机推荐

  1. 32. Longest Valid Parentheses **堆栈

    description: Given a string containing just the characters '(' and ')', find the length of the longe ...

  2. Nacos配置中心功能

    目录 Nacos的配置管理模型 命名空间(Namespace) 配置分组(Group) 配置集(Data ID) 配置项 一个最佳实践 命名空间管理 配置管理 参考 Nacos的配置管理模型 对于Na ...

  3. Activiti7 与 Spring Boot 及 Spring Security 整合 踩坑记录

    1.  前言 实话实说,网上关于Activiti的教程千篇一律,有参考价值的不多.很多都是老早以前写的,基本都是直接照搬官方提供的示例,要么就是用单元测试跑一下,要么排除Spring Security ...

  4. dataX windows10安装

    按照视频课程,从Github上下载文件:https://github.com/alibaba/DataX 然后将下载的压缩包解压即可,不过需要的前提Python环境是要求python2,于是在pyth ...

  5. SpringBoot整合Shiro实现权限控制

    目录 1.SpringBoot整合Shiro 1.1.shiro简介 1.2.代码的具体实现 1.2.1.Maven的配置 1.2.2.整合需要实现的类 1.2.3.项目结构 1.2.4.ShiroC ...

  6. apt-key Debian packages密钥管理命令

    adv子命令 Pass advanced options to gpg. With adv --recv-key you can e.g. download key from keyservers  ...

  7. 单细胞分析实录(18): 基于CellPhoneDB的细胞通讯分析及可视化 (上篇)

    细胞通讯分析可以给我们一些细胞类群之间相互调控/交流的信息,这种细胞之间的调控主要是通过受配体结合,传递信号来实现的.不同的分化.疾病过程,可能存在特异的细胞通讯关系,因此阐明这些通讯关系至关重要. ...

  8. tensorflow2 自定义损失函数使用的隐藏坑

    Keras的核心原则是逐步揭示复杂性,可以在保持相应的高级便利性的同时,对操作细节进行更多控制.当我们要自定义fit中的训练算法时,可以重写模型中的train_step方法,然后调用fit来训练模型. ...

  9. jmeter测试流程整理

    背景 整理jmeter脚本编写流程,注意事项,常用组件,常见问题. 参看链接:https://www.cnblogs.com/pwj2lgx/p/10282422.html 参看:processOn思 ...

  10. Bootstrap框架--DataTables列表示例--添加判断

    一.参考代码 <%@ include file="./include/header.jsp"%> <!-- jquery.dataTables.css --> ...