随笔分类 -  算法-动态规划

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