经典的状压dp 先考虑横着放 如果横着放的方案确定了 那么竖着放的也就唯一确定了 所以总方案数=横着放的方案数 但是可能我们横着放完了后 留下的空间竖着放怎么都不能放满(也就是竖着连续对的0为奇数)不合法 这个我们可以预处理 定义方程:设dp[i,j]表示前i列已经放完横木块且第i列
(喵喵喵? 在学完状压dp后,有种听懂了又没听懂的感觉。。。第二天才做这题,借鉴了一下题解,在cjh大佬帮助下我终于给整明白了,特此写下我的第一篇题解。 题目&描述 题目描述 在n*n(n≤20)的方格棋盘上放置n 个车,某些格子不能放,求使它们不能互相攻击的方案总
状压好题。 题意 给你一个长度为n的正整数序列 \(S\),再有 \(k\) 个正整数。 求有多少种 \(S\) 的排列方式使得其前缀和不会成为那 \(k\) 个数里的任意一个。答案对 \(1e9+7\) 取模。 \(0 \le k \le 2,1 \le n \le 24\)。 题解 因为 \(n \le 24\),明显是状压。 假设 \(f_i\) 表示
来自Wikipedia的定义 The travelling salesman problem (also called the travelling salesperson problem or TSP) asks the following question: "Given a list of cities and the distances between each pair of cities, what is the shortest possible route that vi
运算符号 一.含义 含义 c++ 按位与 a&b 按位或 a|b 按位异或 a^b 按位取反 ~a 左移 a<<b 右移 a>>b 1.&运算(and) 同真则为真,不同则为假。 常用于二进制的取位操作。 a&1的结果就是a二进制的最末位 2.|
博客传送门 写给未来的自己 不断的被打击信心,看着一个个大佬说的水题,自己是看了一天题解、视频,依然懵懵懂懂,深知智商的差距太大。 坚持是现在唯一的办法,不断的努力,不能成为大牛,也要成为一个小牛,还好,我有时间上的优势,大佬们虽然聪明,但毕竟只有三四年的学习时间,我还有八年的时间,应该
1.状态压缩: DP算法中,状态是一个比较重要的量 然而有些DP算法状态多而且杂,那么,对于这样的DP,我们能不能稍做优化? 在背包问题时,我们知道,有些状态是可以被压掉的,那么,换到别的DP中,我们有没有办法压掉一些状态? 有:用二进制数来保存状态,即这里指的状态压缩 要和二进制数打交道,必然少不了位
我们容易发现,如果某一行灯的状态确定时,只有其下一行能改变,而为了达到所有灯都亮,其下一行必须按照点亮上一行所有灯光的策略进行,往下同理 由此可见,当第一行的状态确定时,第二行,第三行直到最后的状态都是确定的 从而枚举第一行的所有操作,共31种,用二进制表示为0~2^5-1 往后每一行
描述 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。 输入格式 第一行一个整数n。 接下来n行每行n个整数,其中第i行第j个整数表示点i到j的距离(一个不超过10^7的正整
题目链接:[NOI2001] 炮兵阵地 - 洛谷 思路:类似“互不侵犯”那道题,只不过影响范围变大了,还有加入的地形影响。所以用了类似的写法,但是不知道为什么wa了,debug了好久也没修好,先放着吧。 #include <bits/stdc++.h> using namespace std; int n, m, bit[10], cnt[10], size; int f[1
前言 状压 DP 就是一类使用根据几进制来进行状态转移方程。 一般来说,数据范围 2 n 2^n 2n 都在情理之中,可是
## 2019icpc台北 J 应该是一个很板的状压&bitset题目(但是之前没用过bitset直接T飞) bitset写法 bitset<505> ss[20]; void solve(){ int n,m; char s; cin>>n>>m; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ cin >> s;
正题 题目链接:https://www.luogu.com.cn/problem/AT3913 题目大意 给出一棵有边权的树,你每次可以选择一条链让所有的边异或上同一个值,求最少的操作次数使得所有边的权值都为\(0\)。 \(2\leq n\leq 10^5,0\leq w<16\) 解题思路 一条边的权值可以视为连接的两个点的权值异或,那么
状态压缩DP 技巧 求一个数的二进制表示中含有多少个 t r u e true true: int table[16] = {0, 1, 1, 2, 1, 2
看来还是一如既往的菜呢。 T1简单题。 T2这种题没怎么见过,以后需要更多去发现题目性质,大胆爆搜+优化。 T3,要学会“对症下药”,对着数据想一些合适的算法,看到20,不是容斥就是状压。 今天这场比赛“二选一”的计数较多,是我的薄弱项目,只有多见一点,多想一点,才有提高的可能。
目录 Description State Input Output Solution Code Description Alice 围观了一场 ICPC 竞赛的滚榜环节。本次竞赛共有 nnn 支队伍参赛,队伍从 1∼n1 \sim n1∼n 编号,iii 号队伍在封榜前通过的题数为 aia_iai。排行榜上队伍按照过题数从大到小进行排名,若两支队伍过题
提交记录 AB见这个的CD \(C\). 状压dp 设\(f_{i,s}\)表示前\(i\)个数组成的数的集合为\(s\). 直接转移即可。 \(D\). exkmp先鸽,noip之后写
传送门 题目描述 输入描述 输出描述 输入样例 2 3 1 1 1 0 1 0 输出样例 9 互不侵犯 的青春版(?),本题省去了对于数量上限的要求,因此仅需使用二维状态 f [ i ] [ j ] 即可,其中 i 表示种到了第 i 行,j 表示该行是以第 j 种状态种地。 对于每一行,同样进行初始化枚举每一种状态
传送门 题目描述 输入描述 输出描述 输入样例 3 2 输出样例 16 数据范围 状态压缩 dp 的又一入门题,第一道能独立写出的状压,感动落泪 ,由于每个国王的攻击范围是周围 8 格,因此对于同一行而言,不能出现摆放相邻国王的情况,且摆放到某一行时,也要考虑是否会被上一行摆放的国
题意:每个点都属于某个公司,公司对应一个权值,对于一条路径,如果一些点属于同一家公司,那么贡献只能算一次,给你一张图,路径只能从小的往大的走,现在问你从\(1\)到每个点的路径上的最大权值是多少。 题解:\(n\)最大为\(36\),出现多个点的公司数最大为\(\frac{n}{2}\),不难发现,对于一条路
原题链接:https://codeforces.ml/gym/103389/problem/C 目录 题意分析Code 题意 有n个景点,下标代表高度,接着又m条路线,一定从低到高,每个景点都属于不同公司,每个公司都有不同的红包政策,但每个公司的红包只能领一个,问从1到 [
正题 题目链接:https://www.luogu.com.cn/problem/CF1242C 题目大意 给出\(k\)个集合,现在从每个集合中取出一个数再把这些数放进每个集合里各一个,求能否使得所有集合的和相等,求方案。 保证所有集合中的出现过的数字都互不相同。 \(1\leq k\leq 15,1\leq n_i\leq 5000,-10^9\leq a
嘤嘤嘤好难,写的乱七八糟 题目链接(https://www.luogu.com.cn/problem/P3160) 题目描述 有一个\(n\)行\(m\)列的整数矩阵,其中\(1\)到\(nm\)之间的每个整数恰好出现一次。如果一个格子比所有相邻格子(相邻是指有公共边或公共顶点)都小,我们说这个格子是局部极小值。 给出所有局部极小值的
题面 状压DP。 看到这个 \(n\leq18\) ,立刻想到状压DP。 考虑转移方程,一个状态可以由两个子状态转移而来,所以 \(f_i=f_{i-j}+f_j\) 。 如果 \(i-j\) 和 \(j\) 这两个状态可以合并,那么等于说是 \(i\) 这个状态本身是个完全图。那么我们判断一下这个 \(i\) 是不是完全图,是的话 \(f_i=
正题 题目链接:https://www.luogu.com.cn/problem/P3577 题目大意 给出\(n\)个点\(m\)条边的一张图,每个点有费用\(C_i\),求选出费用和最小的点使得每个点都至少有一个相邻的点(或自己)被选择。保证图上不存在超过\(10\)个点的简单路径。 \(1\leq n\leq 20000,1\leq m\leq 25000\)