洛咕原题 题解 状压dp+矩乘 首先看到题目说M<=5,这么小的数据明显可以用状压保存相邻状态,于是可以得到一个80分的dp: 先筛出所有可用的状态,然后建立一个矩阵保存可转移的状态,再然后把每个状态都当成最初状态各跑一次dp,累计答案 然而我们发现,n太大了。又发现,其实每次转移可以直接用矩乘来搞 ...
分类:
其他好文 时间:
2018-08-24 18:06:36
阅读次数:
194
题目 分析 很难想到方向,但有方向了就很easy了。 我们如何减少不必要的计算? 如果我们知道了$ 100111 $的相容的数,$ 100101 $的相容数和他是完全一样的。 我们就靠着这个思想写一下就行了。 注意位运算优先级。 代码 1 #include <bits/stdc++.h> 2 usi ...
分类:
其他好文 时间:
2018-08-24 02:14:07
阅读次数:
185
题目 分析 这种题不会做 吃枣药丸。。。。。 想到状压已经经过的点。 然后更新时枚举两个点加进去。 复杂度$ {O(2^n \times n^2)}$。 凉凉。 真正的做法是每一个状态只要找到一组解就break。这样可以省掉一层n。 大致上就像lrj紫书的dp例题一样,反正这个点都要选,那就先选了他 ...
分类:
其他好文 时间:
2018-08-24 02:00:07
阅读次数:
140
发现是状压dp,但是还是不会。。。之前都白学了,本蒟蒻怎么这么菜,怎么都学不会啊。。。 其实我位运算基础太差了,所以状压学的不好。 题干: 代码: ...
分类:
其他好文 时间:
2018-08-24 00:45:26
阅读次数:
160
嘟嘟嘟 一看n那么小,那一定是状压dp了(表示从没写过,慌)。 首先dp[i][j](i 是一个二进制数,第x位为1代表选了第x头牛),表示 i 这个状态最后一头牛是第 j 头牛时的方案数。 然后当 j 被选上时,即 if(i & (1 << (j - 1)))时,我们在枚举倒数第二头牛p,也是当他 ...
分类:
其他好文 时间:
2018-08-23 16:51:53
阅读次数:
189
基于连通性的状压dp 经典入门例题:HDU 1693 Eat the Trees 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=11; int n,m; int mp[N+2][N ...
分类:
其他好文 时间:
2018-08-23 00:17:57
阅读次数:
168
#loj 10170. 「一本通 5.4 例 1」骑士 看数据范围n<=10,所以不是搜索就是状压dp,又因为搜索会超时所以用dp dp[i][k][j]表示现已经放到第i行,前面共有k个,这一行状态为j so,dp[i][k][j]=dp[i-1][k-num[j]][t] #include<io ...
分类:
其他好文 时间:
2018-08-23 00:17:15
阅读次数:
237
这道题正解是 状压DP ,不过我不会所以写一下 随机化算法 来骗骗分。 听说当时考场上就有很多写 prim 然后挂掉的神仙,其实这道题是可以prim过的 prim是一种基于 贪心 的算法,在本题中由于盲目的选择 当前最优解 可能会使得后面的决策不优,于是我们请出 基于随机化的prim ~~我口胡的~ ...
分类:
其他好文 时间:
2018-08-21 20:14:48
阅读次数:
186
可以看出Tarjan缩点,但对于第一问,我竟然想到状压DP😢 对于第二问,我想的是怎么添边成环😢 对于第一问,统计入度为0的点即可 对于第二问,统计出度为0的点,与第一问取个max即可 因为要把所有点的入度出度都变成大于0的...... 还有就是Tarjan缩点的写法,要用do while... ...
分类:
其他好文 时间:
2018-08-19 19:09:18
阅读次数:
154
题目大意:有$n-1$个数为$2\sim n$,其中$n\leq 500$,两个人选数,要求两个人选的数中,每个人选的数都和另一个人选的所有数互质。问选的方法总数。 题解:状压$DP$,由于一个数$N$最多有一个大于$\sqrt{N}$的质因子,可以对小于等于$\sqrt{N}$的质因子和大于$\s ...
分类:
其他好文 时间:
2018-08-18 14:54:55
阅读次数:
123