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

看到\(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. webview和H5交互

    由于H5的灵活多变,动态可配的特点,也为了避免冗长 的审核周期,H5页面在app上的重要性正日益突显. iOS应用于H5交互的控件主要是UIWebView及WKWebView WKWebView是14 ...

  2. 《快来为你的 .NET 应用加个监控吧!》更新版本啦

    目录 导读 三种方式处理监控数据 主动推送 ASP.NET Core 自定义URL .NET diagnostics 自定义监控指标 导读 CZGL.ProcessMetrics 是一个 Metric ...

  3. Pandas高级教程之:window操作

    目录 简介 滚动窗口 Center window Weighted window 加权窗口 扩展窗口 指数加权窗口 简介 在数据统计中,经常需要进行一些范围操作,这些范围我们可以称之为一个window ...

  4. Kubernetes部署-RKE自动化部署

    一.简介 RKE:Rancher Kubernetes Engine 一个极其简单,闪电般快速的Kubernetes安装程序,可在任何地方使用. 二.准备工作 I.配置系统 系统:CentOS 7 / ...

  5. python_字典列表嵌套的排序问题

    上一篇我们聊到python 字典和列表嵌套用法,这次我们聊聊字典和列表嵌套中的排序问题,这个在python基础中不会提到,但实际经常运用,面试中也喜欢问,我们娓娓道来. 在说组合排序之前,先来看看排序 ...

  6. Python+Request库+第三方平台实现验证码识别示例

    1.登录时经常的出现验证码,此次结合Python+Request+第三方验证码识别平台(超级鹰识别平台) 2.首先到超级鹰平台下载对应语言的识别码封装,超级鹰平台:http://www.chaojiy ...

  7. sql-2-DDL

    DDL-定义数据库 1.对database操作 1.创建数据库 create database [if not exist] 库名; CREATE DATABASE `shop` CHARACTER ...

  8. 在使用TCP协议进行消息发送时,对消息分帧

    成帧与解析 阅读 <java TCP/IP Socket 编程>第三章笔记 成帧技术(frame)是解决如何在接收端定位消息的首尾位置的问题.在进行数据收发时,必须指定消息接收者如何确定何 ...

  9. 扩展欧几里得(exgcd)-求解不定方程/求逆元

    贝祖定理:即如果a.b是整数,那么一定存在整数x.y使得ax+by=gcd(a,b).换句话说,如果ax+by=m有解,那么m一定是gcd(a,b)的若干倍.(可以来判断一个这样的式子有没有解)有一个 ...

  10. java 8内置的四大核心函数式接口

    Consumer<T> : 消费性接口 返回值  void accept(T t); public void happy(double money, Consumer<Double& ...