【CSP模拟赛】Adore(状压dp 二进制)
题目描述
小w偶然间见到了一个DAG。这个DAG有m层,第一层只有一个源点,最后一层只有一个汇点,剩下的每一层都有k个节点。现在小w每次可以取反第i(1<i<n-1)层和第i+1层之间的连边。也就是把原本从(i,k1)连到(i+1,k2)的边,变成从(i,k2)连到(i+1,k1)。请问他有多少种取反的方案,把从源点到汇点的路径数变成偶数条?答案对998244353取模。
输入描述
一行两个整数m,k。接下来m-1行,第一行和最后一行有k个整数0或1,剩下每行有k2个整数0或1,第(j-1)×k+t个整数表示(i,j)到(i+ 1,t)有没有边。
输出描述
一行一个整数表示答案。
输入样例
5 3
1 0 1
0 1 0 1 1 0 0 0 1
0 1 1 1 0 0 0 1 1
0 1 1
输出样例
4
20%的数据满足n≤10,k≤2。
40%的数据满足n≤103,k≤2。
60%的数据满足m≤103,k≤5。
100%的数据满足4≤m≤104,k≤10。
分析
看不懂题目手玩样例玩了一个小时都没玩出来最后发现自己少连了一条边
由于路径数量并不需要知道具体的值,只需要知道奇偶性就行,而且发现k还这么小,所以考虑状压dp
dp[i][s]表示到达i层时 到达各点方案数的奇偶性情况为s 的方案数。
这个可以根据题目中给出的边求出下一个状态,因为存在反转所以每次有两种转移方式
于是某个憨憨高兴地用k2的转移方法获得了60pts的好成绩
对于每次给的边,我们可以预处理出每个点与下一层点的连边情况并状压起来
因为只有奇数转移才会影响状态,所以只需要找到方案数为奇数的点然后让下一个状态异或上之前预处理好的它的连边状态就可以得到下一层的状态了
Code
#include<cstdio>
const int mod=;
int n,K,st,ans,dp[][],V[][];
int main()
{
scanf("%d%d",&n,&K);
for(int i=,a;i<=K;i++)scanf("%d",&a),st=(st<<)+a;dp[][st]=;
for(int i=;i<n-;i++)
{
int a[]={},b[]={};
for(int j=K;j>=;j--)for(int k=K,o;k>=;k--)
scanf("%d",&o),a[j]|=o<<(k-),b[k]|=o<<(j-);
for(st=;st<=(<<K)-;st++)if(dp[i][st])
{
int ed1=,ed2=;
for(int j=;j<=K;j++)if(st&(<<(j-)))ed1^=a[j],ed2^=b[j];
(dp[i+][ed1]+=dp[i][st])%=mod;
(dp[i+][ed2]+=dp[i][st])%=mod;
}
}
for(int i=K;i>=;i--)scanf("%d",&V[i][]);
for(st=;st<=(<<K)-;st++)if(dp[n-][st])
{
int cnt=;
for(int j=;j<=K;j++)if(st&(<<(j-))&&V[j][])cnt^=;
if(cnt==)(ans+=dp[n-][st])%=mod;
}
printf("%d\n",ans);
}
【CSP模拟赛】Adore(状压dp 二进制)的更多相关文章
- 4.26 省选模拟赛 T3 状压dp 差分求答案
LINK:T3 比较好的题目 考试的时候被毒瘤的T2给搞的心态爆炸 这道题连正解的思路都没有想到. 一看到题求删除点的最少个 可以使得不连通. 瞬间想到最小割 发现对于10分直接跑最小割即可. 不过想 ...
- NOIp模拟赛 巨神兵(状压DP 容斥)
\(Description\) 给定\(n\)个点\(m\)条边的有向图,求有多少个边集的子集,构成的图没有环. \(n\leq17\). \(Solution\) 问题也等价于,用不同的边集构造DA ...
- POJ1185 状压dp(二进制//三进制)解法
很显然这是一道状压dp的题目 由于每个最优子结构和前两行有关,一个显而易见的想法是用三维dp[i][j][k]用来记录在第i行下为j状态,i - 1行为k状态时的最大值,然而dp[100][1 < ...
- BZOJ 1688: [Usaco2005 Open]Disease Manangement 疾病管理 状压DP + 二进制 + 骚操作
#include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #defin ...
- 模拟赛毒瘤状压DP题:Kronican
Kronican 内存限制:32 MiB 时间限制:2000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 上传者: cqbzgm 题目描述 Mislav有N个无限体积的杯子,每一个杯子中都 ...
- 2018.10.17 NOIP模拟 管道(状压dp)
传送门 状压dp好题. 怎么今天道道题都有点东西啊 对于今天题目神仙出题人先膜为上策:%%%%DzYoAk_UoI%%%% 设f[i][j]f[i][j]f[i][j]表示选取点的状态集合为iii,当 ...
- 2018.09.08 NOIP模拟 division(状压dp)
这么sb的题考场居然写挂了2233. 假设n=∏iaiki" role="presentation" style="position: relative;&qu ...
- 2018.08.29 NOIP模拟 movie(状压dp/随机化贪心)
[描述] 小石头喜欢看电影,选择有 N 部电影可供选择,每一部电影会在一天的不同时段播 放.他希望连续看 L 分钟的电影.因为电影院是他家开的,所以他可以在一部电影播放过程中任何时间进入或退出,当然他 ...
- bzoj 5299: [Cqoi2018]解锁屏幕 状压dp+二进制
比较简单的状压 dp,令 $f[S][i]$ 表示已经经过的点集为 $S$,且最后一个访问的位置为 $i$ 的方案数. 然后随便转移一下就可以了,可以用 $lowbit$ 来优化一下枚举. code: ...
随机推荐
- 每周分享五个 PyCharm 使用技巧(四)
文章首发于 微信公众号:Python编程时光 PyCharm 是大多数 Python 开发者的首选 IDE,每天我们都在上面敲着熟悉的代码,写出一个又一个奇妙的功能. 一个每天都在使用的工具,如果能掌 ...
- 北航OO课程完结总结
什么是OO? 面向对象,是一种编程的思想方法,但是在这门课程中,我们实际学习到的是将理论运用到具体实践上,将自己的想法付诸实践,不断去探索和优化的这一体验. 后两次作业架构总结 本单元两次作业,我们面 ...
- SASS系列之:!global VS !deafult
先脑补两组场景. 场景一: 同事们每天中午都会外出吃饭.通常情况下都会先问,去哪儿吃啊?不知道啊?下楼再说吧.到了楼下好不容易有个人站出来说,既然没人说我可就说了啊,咱们去吃香草香草吧.没人反对就去, ...
- mysql基础指令知识
桌面指令(cmd)进入mysql客户端 第一步:安装mysql,配置环境变量 第二步:手动开启服务 第三步:输入如下指令: mysql [-h localhost -P 3306] -u 用户名 - ...
- MySQL DataType--隐式类型转换
隐式类型转换 在官方文档中对隐式类型转换规则有如下描述: 1. If one or both arguments are NULL, the result of the comparison is N ...
- Android笔记(六十六) android中的动画——XML文件定义属性动画
除了直接在java代码中定义动画之外,还可以使用xml文件定义动画,以便重用. 如果想要使用XML来编写动画,首先要在res目录下面新建一个animator文件夹,所有属性动画的XML文件都应该存放在 ...
- CentOS7.x-lnmp环境下安装Discuz论坛
1.安装lnmp.这里采用一键安装的包 yum -y install wget wget http://soft.vpser.net/lnmp/lnmp1.6-full.tar.gz 2.加压安装ln ...
- 关于Istio 1.1,你所不知道的细节
本文整理自Istio社区成员Star在 Cloud Native Days China 2019 北京站的现场分享 第1则 主角 Istio Istio作为service mesh领域的明星项目,从2 ...
- suse双网卡绑定
这里使用两张网卡eth1.eth2进行 编辑/etc/sysconfig/network/ifcfg-bond0文件(此文件没有需要创建) device='bond0' BOOTPROTO='stat ...
- linux一些配置
ifconfig 查询.设置网卡和ip参数 ifup ens33 启动网卡 ifdown 关闭网卡 systemctl restart/start/stop network 重启.开始.关闭 网络服务 ...