传送门 f[i][j][k]f[i][j][k]f[i][j][k]表示前iii个点连了jjj条边,第i−K+1i-K+1i−K+1~iii个点连边数的奇偶性为kkk时的方案数. 转移规定只能从后向前连边. 然后讨论奇偶性转移就行了. 注意从f[i−1]f[i-1]f[i−1]转移过来的时候不用考虑最前面一位. 然后再用f[i][j]f[i][j]f[i][j]转移f[i][j+1]f[i][j+1]f[i][j+1]就行了. 代码: #include<bits/stdc++.h> using…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3195 看到数据范围就应该想到状压呢... 题解(原来是这样):https://www.cnblogs.com/LadyLex/p/7252789.html 代码如下: #include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long ll; in…
[BZOJ3195][Jxoi2012]奇怪的道路 Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座城市,编号为1..n.m条道路连接在这些城市之间,每条道路将两个城市连接起来,使得两地的居民可以方便地来往.一对城市之间可能存在多条道路.据史料记载,这个文明的交通网络满足两个奇怪的特征.首先,这个文明崇拜数字K,所以对于任何一条道路,设它连接的两个城市分别为u和v,则必定满足1 <=|u - v|…
3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 305  Solved: 184[Submit][Status][Discuss] Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座城市,编号为1..n.m条道路连接在这些城市之间,每条道路将两个城市连接起来,使得两地的居民可以方便地来往.一对城市之间可能存在…
传送门 BZOJ 3195 题解 这是一道画风正常的状压DP题. 可以想到,\(dp[i][j][k]\)表示到第\(i\)个点.已经连了\(j\)条边,当前\([i - K, i]\)区间内的点的度数的奇偶性状态是\(k\)(用二进制表示,度数为奇则对应位是1,反之为0)的方案数. 然后对每个状态枚举\(i\)要和区间\([i - K, i - 1]\)中的谁连边,如果\(i\)和\(i - p\)连边的话,新的状态\(k'\)就是 k ^ (1 << p) ^ 1(二进制第\(x\)位表示…
题目描述 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外. 考古学家已经知道,这个文明在全盛时期有n座城市,编号为1..n.m条道路连接在这些城市之间,每条道路将两个城市连接起来,使得两地的居民可以方便地来往. 一对城市之间可能存在多条道路. 据史料记载,这个文明的交通网络满足两个奇怪的特征. 首先,这个文明崇拜数字K,所以对于任何一条道路,设它连接的两个城市分别为u和v,则必定满足1 <=|u - v| <= K.此外,任何一个城市都与恰好偶数条道路相连(0…
看范围,状压没毛病 但是如果随便连的话给开1<<16,乘上n,m就爆了 所以规定转移时只向回连边 于是想状态数组:f[i][j]表示到i这里i前K位的状态为j(表示奇偶) 发现有条数限制,但是n,m,2^K都比较小,加一维, f[i][j][k]表示前i位,用j条路,i前的K位状态为j 转移的话,因为1<=|u - v|<=K, 所以转移时必须要保证转移前一位能连到的最远距离是偶数 然后在本位就向回依次连就好了. #include<cstdio> #define mod…
受惯性思维的影响自动把二进制状态认为是连与不连......... 我们这里二进制状态表示的是奇偶,这样的话我们f[i][j][k]表示的就是前i个城市用了j个边他前k个城市的奇偶状态,然后想想怎么转移,我们要是深搜就会从一开始一直搜每搜到一个最终状态就是一个答案,然后状态转移同理,我们f[1][0][0]是1,往后转移,到了就加,就是了. 坑:I.取模..... ||.我们转移的时候一定不要有重状态,三层for的顺序十分关键 |||.转移的时候最远的一位一定要是0 #include <cstdi…
传送门 状压dp好题. 首先需要回忆O(nlogn)O(nlog n)O(nlogn)求lislislis的方法,我们会维护一个单调递增的ddd数组. 可以设计状态f(s1,s2)f(s1,s2)f(s1,s2)表示选取的数的集合是s1s1s1,然后d数组中元素的出现情况是s2s2s2. 这样转移是很简单的. 但时空都无法承受. 于是我们考虑优化,不难发现s1s1s1是s2s2s2的子集. 因此我们三进制状压dp就行了. 代码…
传送门 状压dp经典题. 令f[i][j]f[i][j]f[i][j]表示到第i个,第i−k+1i-k+1i−k+1~iii个物品的状态是j时的最大总和. 然后简单维护一下转移就行了. 由于想皮一下果断上了滚动数组优化发现速度rank1了. 代码…