随笔分类 -  dp

摘要:G - Ban Permutation 求长为 \(N(N\leq 100)\) 且满足以下条件的排列 \(P=(P_1,P_2,...,P_N)\) 的个数: \(\forall 1\leq i\leq N\),\(|P_i-i|\geq X(X\leq 5)\)。 考虑使用容斥 \(f[i][j 阅读全文
posted @ 2024-08-24 17:06 gan_coder 阅读(15) 评论(0) 推荐(0)
摘要:P7406 [JOI 2021 Final] 集合写真 题意 给定一个排列,每次可以交换相邻两个,最少要多少次操作使得 对于任意 \(i \in [1,N-1]\),都有 \(a_i <a_{i+1}+2\)。 题解 经过观察可以发现,连续下降的数之间只能相差1,也就是说如果有连续下降的一段,它们必 阅读全文
posted @ 2024-08-20 09:59 gan_coder 阅读(13) 评论(0) 推荐(0)
摘要:abc227F 依次钦定x为路径上的第k大的数,然后dp即可。 #include<cstdio> #include<algorithm> #include<cstring> #include<map> #include<queue> #include<bitset> #include<cmath> 阅读全文
posted @ 2024-01-18 19:31 gan_coder 阅读(11) 评论(0) 推荐(0)
摘要:abc132F - Small Products 容易想到暴力dp,f[i][j]表示到第i个位置,且i位置上填的是j的方案数。 虽然N非常大,但是如果我们考虑按\(\frac{n}{k}\)的值分块,那么就只有根号级别的数量 \(f[i][j]\)表示在到第i个位置,且第i个位置选了第j个块中的数 阅读全文
posted @ 2024-01-16 09:48 gan_coder 阅读(28) 评论(0) 推荐(0)
摘要:abc333F - Bomb Game 2 设\(f_{i,j}\)表示在有i个人的队列中,第j个人成为第一个的概率。 \(f_{n,1}=\frac{1}{2}f_{n,n}\) \(f_{n,2}=\frac{1}{2}f_{n-1,1}+\frac{1}{2}f_{n,1}\) ... \(f 阅读全文
posted @ 2024-01-12 15:07 gan_coder 阅读(29) 评论(0) 推荐(0)
摘要:abc335F - Hop Sugoroku 首先容易想到\(O(n^2)\)的dp 考虑优化,对于一个i,只会对满足\(i+a[i]*x=j\)的j有贡献。 也就是j%a[i]=i%a[i] 那么我们可以延迟转移,用cnt[a[i]][i%a[i]],来记录贡献, 然后我们数组不可能开那么大,所以 阅读全文
posted @ 2024-01-12 10:56 gan_coder 阅读(22) 评论(0) 推荐(1)
摘要:D. Queue f[i]表示第i个F需要多少时间才能让所有的M都移到她后面,那么我们考虑转移,分为两种情况。 第i个F和第i-1个F挨着,那么显然f[i]=f[i-1]+1 假如中间隔着一些M, 可以分为两种情况,假如i可以在i-1完成之前追上它,那么就是f[i-1]+1,否则就说明 i一直在进行 阅读全文
posted @ 2023-10-30 18:32 gan_coder 阅读(31) 评论(0) 推荐(0)
摘要:D. Pawn 感觉这种dp套路似乎非常常见,我们可以设 f[i][j][x]表示走到(i,j),当前的值为f[i][j][x]*k+x ,也就是我们将余数x作为放在状态中。 #include<cstdio> #include<algorithm> #include<cstring> #includ 阅读全文
posted @ 2023-10-30 18:23 gan_coder 阅读(22) 评论(0) 推荐(0)
摘要:cf1110D. Jongmah 如果能够发现一点转化的话就简单很多 比如说最后的答案里出现了 三个(a,a+1,a+2),我们可以将它看作是(a,a,a),(a+1,a+1,a+1),(a+2,a+2,a+2) 也就是每种三元组(除了(a,a,a))最多只会出现两次 那么每种数最多有6个是个其它数 阅读全文
posted @ 2023-10-06 11:37 gan_coder 阅读(14) 评论(0) 推荐(0)
摘要:E - Subsequence Path 第一眼看过去感觉又是什么魔改BFS的样子,但是感觉不好弄 但是往dp上想就很容易 \(f[i]\)表示走到i的最小代价,按着给出的序列顺序转移即可,转移是O(1)的。 代码非常简单 #include<cstdio> #include<algorithm> # 阅读全文
posted @ 2023-09-11 23:24 gan_coder 阅读(11) 评论(0) 推荐(0)
摘要:开始看成走到相邻格子,后面发现是车的走法。。。 发现可以将整个图分成四个部分, (x1,y1) $(x,y1) (x \neq x1)$ $(x1,y) (y\neq y1)$ $(x,y) (x\neq x1 ,y\neq y1)$ 然后每一部分中的点的答案都是相同的,转移即可。 ```cpp # 阅读全文
posted @ 2023-08-22 08:25 gan_coder 阅读(21) 评论(0) 推荐(0)
摘要:[abc236_e](https://atcoder.jp/contests/abc236/tasks/abc236_e) 二分+判断 如果是平均数,我们只需将每个数-mid,然后dp判断是和是否大于等于0即可 如果是中位数,那么我们将a[i]=mid看作1,然后dp判断是否大于0即可 ```cpp 阅读全文
posted @ 2023-08-15 12:45 gan_coder 阅读(133) 评论(0) 推荐(0)
摘要:[添加链接描述](https://ac.nowcoder.com/acm/problem/13249) 之前做过一次,好像是看别人题解的,这次自己再做一次。 考虑一个节点x需要覆盖,假设它的所有子树都已覆盖完全,那么有两种情况。 1.子树中选择的点可以覆盖x,直接覆盖即可。 2.选择的点覆盖不了x, 阅读全文
posted @ 2023-05-20 20:27 gan_coder 阅读(34) 评论(0) 推荐(0)
摘要:一个区间的权值为最大的三个数的和-区间长度,求最大的权值。 首先我们注意到,两个端点肯定是max,考虑反证法,假设当前选的是l,r区间,若两端不是max,则可以通过增大l,减小r来增加答案。(然而好像并没有什么用?) 我们可以设$f[i][1/2/3]$,表示到了第i个点,我们当前选了几个的最大贡献 阅读全文
posted @ 2023-05-06 11:28 gan_coder 阅读(24) 评论(0) 推荐(0)
摘要:~~又来水博客了~~ [SDOI2016]征途 推一下柿子就会发现,我们要求最小值的部分是将整个序列分为来m段,然后每段和的平方相加最小。 $f[i][j]=f[k][j-1]+(s[i]-s[k])^2$,然后用滚动数组优化一下。 $g[i]=f[k]+s[i]^2-2s[i]s[k]+s[k]^ 阅读全文
posted @ 2023-04-28 17:17 gan_coder 阅读(27) 评论(0) 推荐(0)
摘要:[HNOI2008]玩具装箱 斜率优化入门题 显然有 $f[i]=\min{f[j]+(s[i]-s[j]+i-j-1-l)^2}$ 拆开可得 $f[j]+(s[j]+j)^2=f[i]+2(s[i]+i-1-l)(s[j]+j)$ 那么我们可以将决策看作是($s[j]+j$,$f[j]+(s[j] 阅读全文
posted @ 2023-04-28 16:07 gan_coder 阅读(74) 评论(0) 推荐(0)
摘要:合并回文子串 由于n比较小,我们可以区间dp $f[i][j][a][b]$表示s[i,j]和t[a,b]能否一起构成回文子串。 $g[i][j],h[i][j]$分别表示s[i,j],t[i,j]能否构成回文字串。 g,h直接暴力求即可。 注意判断边界条件,也就是i=j和a=b的情况 #inclu 阅读全文
posted @ 2023-04-25 17:36 gan_coder 阅读(63) 评论(0) 推荐(0)
摘要:小 A 的卡牌游戏 小 A 最近沉迷于一款名为 Hearthverse 的卡牌游戏。在这款游戏中,卡被分为了三个种类(随从、法术和魔法阵),在组卡时,这款游戏严格规定了卡组中每种卡牌的数量,具体来说,一副 n 张卡的卡组需要包含恰好 a 张随从卡, b 张法术卡和 c 张魔法阵卡,并且 a+b+c= 阅读全文
posted @ 2023-02-01 21:39 gan_coder 阅读(40) 评论(0) 推荐(0)