【atcoder abc281_d】动态规划】的更多相关文章

Atcoder abc187 F Close Group 题目 给出一张n个点,m条边的无向图,问删除任意数量的边后,留下来的最少数量的团的个数(\(n \le 18\) ) 题解 核心:枚举状态+动态规划 第一次枚举状态,对状态进行预处理,判断状态里所有的1是否能够形成一个团 第二次枚举状态S,再对每个状态枚举子状态T,假如T是一个团,那么 就可以进行动态递推 \[dp[S]=min(dp[S],dp[S\wedge T]+1) \] 复杂度分析 状态S中1的个数有x个,那S的子集就有 \(2…
原文链接https://www.cnblogs.com/zhouzhendong/p/AGC002F.html 题目传送门 - AGC002F 题意 给定 $n,k$ ,表示有 $n\times k$ 个球,其中,颜色为 $1,2,\cdots, n$ 的球各有 $k$ 个. 将这些球任意排列成一排,对于每一种颜色,将这种颜色的球的最左边的那个涂成颜色 $0$ . 问最终可以得到多少种不同的排列. $1\leq n,k\leq 2000,{\rm Mod} = 10^9 +7$ 题解 首先当 $…
原文链接www.cnblogs.com/zhouzhendong/p/AGC020E.html 前言 真 \(\cdot\) 信仰型动态规划 题解 我们可以采用信仰型动态规划解决此题. 设 \(dp[S]\) 表示 S 这个字符串的所有子集可以被编码成多少种. 那么分两种情况转移: 不编码,答案是子集总数. 考虑枚举最左边的一处编码,递归DP. 时间复杂度 \(O(信仰)\) . 时间复杂度证明?详见官方题解.反正我没去看. 代码 #include <bits/stdc++.h> #defin…
传送门:E - RLE (atcoder.jp) 题意: 求满足原长为N且转换后长度严格小于N条件的小写字母组成的字符串的数量,输出时对P取模. 其中,转换规则为,将连续相同的字串替换为"字符数量+字符",如aaa替换为3a. 思路: 状态表示: fi,j:原长为i且转换后长度为j的字符串的数量. 状态转移: 初始化:将仅包含一种字符的所有字符串进行初始化. 转移:先考虑暴力做法:fi,j:考虑最后一段连续相同字串的长度为k,其替换后的字串长度为u,那么fi,j = 25 * ∑ fi…
原文链接 https://www.cnblogs.com/zhouzhendong/p/AtCoder-Dwango-Programming-Contest-V-E.html 题意 有 $n$ 个数,第 $i$ 个数为 $a_i$ ,对于任意一个 $1,2,\cdots ,n$ 的排列 $P$ ,如果将所有边 $(i,P_i)$ 相连,那么必然得到一些环.定义函数 $f(P)=\prod_{r 是 P 中的一个环} r 中最小的 a_i 值$ .定义 $S(i)=\sum_{P代表i 个环} f…
原文链接https://www.cnblogs.com/zhouzhendong/p/AGC026E.html 题目传送门 - AGC026E 题意 给定一个长度为 $2n$ 的字符串,包含 $n$ 个 $'a'$ 和 $n$ 个 $'b'$ . 现在,让你按照原顺序取出一些字符,按照原顺序组成新的字符串,输出所有满足条件的字符串中字典序最大的?(字典序: $'b'>'a'>'\ '$) 条件限制:当且仅当取了原序列的第 $i$ 个 $'a'$ 时,原序列的第 $i$ 个 $'b'$ 也被取了…
原文链接www.cnblogs.com/zhouzhendong/AGC026F.html 前言 太久没有发博客了,前来水一发. 题解 不妨设先手是 A,后手是 B.定义 \(i\) 为奇数时,\(a_i\) 为"奇数位上的数":\(i\) 为偶数时, \(a_i\) 为"偶数位上的数".定义左.右两端的数分别表示 \(a_1\) 和 \(a_n\). 考虑第一步: 首先,如果 A 取了左右某一个端点,那么他必然能取走和他取的点奇偶性相同的所有点. 然后,我们考虑…
原文链接www.cnblogs.com/zhouzhendong/p/AGC030F.html 草率题解 对于每两个相邻位置,把他们拿出来. 如果这两个相邻位置都有确定的值,那么不管他. 然后把所有的这些数拿出来,分为两类,一类是没有被填入的,一类是被填入的. 然后大力DP即可.由于没有被填入的可以任意排列,所以最后还要乘上一个阶乘. 代码 #include <bits/stdc++.h> #define clr(x) memset(x,0,sizeof x) #define For(i,a,…
[agc030f]Permutation and Minimum(动态规划) 题面 atcoder 给定一个长度为\(2n\)的残缺的排列\(A\),定义\(b_i=min\{A_{2i-1},A_{2i}\}\),求有多少种不同的\(b\). 题解 考虑这个\(b\)的取值是两两配对之后求\(min\),所以我们把所有的数按照从大往小处理,这样子就可以在每一对数填好的时候计算贡献. 首先把已经确定的\(b\)直接丢掉.这样子剩下了若干个填了一半和没有填的对. 设\(f[i][j][k]\)表示…
[arc073f]Many Moves(动态规划,线段树) 题面 atcoder 洛谷 题解 设\(f[i][j]\)表示第一个棋子在\(i\),第二个棋子在\(j\)的最小移动代价. 发现在一次移动结束之后,总是有一个棋子会动到当前位置,因此状态改为当前是第\(i\)次操作,第\(i\)次操作没有动的那个棋子在\(j\)位置时的最小代价. 把第一维省掉,用线段树动态维护这个数组. 每次枚举移动哪一个棋子,直接线段树对应修改即可. #include<iostream> #include<…