随笔分类 - 算法-动态规划
摘要:状压DP,设dp[s]表示考虑了前|s|个位置,填了s里的这些数。转移时枚举下一个位置上的数i,考虑它和前面的数、后面的数,分别会产生哪些代价。时间复杂度O(2^mm^2)。发现对(s,i),这个代价可以通过递推,预处理出来,时间复杂度降为O(2^m*m)。但是预处理一个这样的数组,空间复杂度O(2^m*m),无法承受。可以按集合大小,从小到大,一边DP,一边处理代价数组。用滚动数组,或者stl-queue优化空间
阅读全文
摘要:先求严格上升的这些序列的权值之和,再乘以n!就是答案了。DP。设f[i]表示所有长度为i的,严格上升的序列,的权值和。考虑在f[i-1]后面加一个数,转移到f[i],那么要求新加入的数不能和前面任意一个数相同,且必须是最大的。先不管是不是最大的,最后再除以i就行。不能相同这个条件可以容斥。最后发现需要预处理自然数幂的和,用求逆,把NTT换成暴力乘就行。
阅读全文
该文被密码保护。
该文被密码保护。
该文被密码保护。
摘要:选入了一些比较简单的题。太偏的和太难的,就不放进来啦~
阅读全文
摘要:分析如何刻画题面中描述的过程。可以按高度从高到低考虑,但是这样不好计数。换个角度看,按位置从后往前考虑这个过程,就可以DP了。朴素的想法是一个状压DP。发现状态中只有:极长前缀$0$的数量,这个条件是关键的。由此可以简化状态。转移时,若当前位置最终未被保留,则根据记录在状态里的:前缀$0$的数量,可以直接转移;若最终被保留了,考虑它的最终高度会不会改变状态的第二维,如果不改变,则这种方案数先暂时不统计。当改变了第二维时,我们一起计算方案数。
阅读全文
摘要:[toc] "比赛链接" CF1348D Phoenix and Science 分析问题的性质。首先,每块的大小是无关紧要的,重要的是你每天会切多少块。这取决于两个因素:当前已有的块数$d$,当前所有块的总和$w$。假设你今天要新切$x$刀,那么显然,$i$必须满足:$0\leq x\leq d$
阅读全文
摘要:题目链接 考虑求出一个数组$g$,$g[i]$表示至少有$i$个非平局的方案数。也就是说,我们钦定了$i$对点,每对点都是“祖先-后代”的关系,剩下的$m-i$对点可以任意匹配,此时的方案数就是$g[i]$。我们设答案为$f[0\dots m]$,$f[i]$表示的是恰好有$i$个非平局回合的方案数
阅读全文
摘要:比赛链接 CF1340A Nastya and Strange Generator 如题目所定义地,我们设$r_j$表示$\geq j$的位置中,第一个没有被占用的位置。特别地,我们认为位置$n+1$永远不被占用。即:如果$[j,n]$都已经被占用了,那么$r_j=n+1$。 题目还定义了,\(\t
阅读全文
摘要:对于一个排列,它的操作次数是它所有循环圈长度的$\operatorname{lcm}$。 因为答案是求乘积。我们可以分别计算每个质数的贡献。 对于一个质数$p$,它对答案的贡献是每个排列中,所有循环圈长度(分解质因数后)$p$的次数的最大值之和。即: $$ ans=\prod_{p}p^{\sum_
阅读全文
摘要:[toc] "比赛链接" CF1329A Dreamoon Likes Coloring 涂到的格子数最少的构造方案是,让第$i$次涂色的位置从$i$开始。此时涂到的格子数为$\max_{i=1}^{m}(i+l_i 1)$。 涂到的格子数最多的构造方案是,每种颜色都涂在上一种颜色结束后,即不同颜色
阅读全文
摘要:题目链接 如果$a\times b$是完全平方数,$a\times c$是完全平方数,那么$a2\times b\times c$也是完全平方数,又因为$a2$是完全平方数,所以$b\times c$也是完全平方数。也就是说,完全平方数具有传递性。据此,我们可以把给定的序列划分为若干个集合,使得同一
阅读全文
摘要:LOJ3277 「JOISC 2020 Day3」星座 3 题目大意 题目链接 建议直接阅读原题题面。 本题题解 考虑一个区间,初始时为$[1,n]$。每次找出区间中楼房的最大高度$mx$。高度为$mx$的这些楼房把区间划分为了若干段,我们继续递归每一段。递归的边界是区间内所有楼房高度相同时不再递归
阅读全文
摘要:前言 考虑一个简单的模型。有$n$个物品,$m$个位置,第$i$物品只能放在$1\dots p_i$中的某个位置上。求有多少种方案,使得每个物品恰好匹配一个位置,每个位置上至多只有一个物品。 标题所说的“一个简单的计数技巧”,指的正是解决这个问题的方法。 我们把所有$p_i$从小到大排序。此时每个物
阅读全文
摘要:CF1316E Team Building "题目链接" 如果只选 观众 ,则我们取$a_i$最大的$k$个人就好。如果只选 运动员 ,则我们可以做一个简单的状压DP:设$dp[i][mask]$表示考虑了前$i$个人,$mask\in[0,2^p)$中的这些位置已经被占,此时的最大收益。DP复杂度
阅读全文