随笔分类 -  动态规划 -- dp

摘要:link 题意简述 初始有 $n$ 个小球,小球有 $4$ 种颜色,初始的等级为 $0$ 你每一次可以选择一个小球删除,删除后后面的小球会向前 移动一位 如果有至少 $3$ 个相同颜色和等级的小球连续,那么左侧的 $3$ 个会合并成一个颜色相同等级 $+1$ 的小球(可能有连锁反应) 问有多少种能到 阅读全文
posted @ 2020-02-16 13:58 siruiyang_sry 阅读(217) 评论(0) 推荐(0)
摘要:$CSP\space S$ 格雷码 $solution:$ 直接模拟即可。 时间复杂度 $O(n)$ 。 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; vo 阅读全文
posted @ 2019-11-21 19:38 siruiyang_sry 阅读(315) 评论(0) 推荐(2)
摘要:link $solution:$ 如果按照 $A$ 从小到大排序后,极差的计算方式为组内最后加入的数字减去开始插入的数字。 设 $f_{i,j,k}$ 表示前 $i$ 个人,有 $j$ 组还没有最大值,当前和为 $k$ 的方案数,转移考虑 $i$ 选为最大,最小,中间与单独一组即可。答案即为 $\s 阅读全文
posted @ 2019-10-29 19:34 siruiyang_sry 阅读(201) 评论(0) 推荐(1)
摘要:link $solution:$ 朴素 $dp$,暴力枚举选择 $i$ 号人的第 $j$ 张卡片,朴素 $dp$ 即可,时间复杂度 $O(n^4)$ 。 考虑对于朴素 $dp$ 的优化,发现其实是一个背包卷积的过程,考虑按 $A$ 值从大到小依次加入,每次维护新的 $P$ 值可以做到 $O(1)$ 阅读全文
posted @ 2019-08-11 19:18 siruiyang_sry 阅读(249) 评论(0) 推荐(1)
摘要:AGC014 E Blue and Red Tree link $solution:$ 考虑题目的性质,可以发现蓝树与红树肯定有交,且必在最后一次割掉。 所以考虑反向过程,如何从红树变为蓝树。 将最后一次的情况往外推广,每一次也要有类似的交集,。 考虑如何去维护,通过启发式合并 $set$ 与并查集 阅读全文
posted @ 2019-08-10 18:25 siruiyang_sry 阅读(213) 评论(0) 推荐(1)
摘要:赛马 题意简述 田忌和齐王又要赛马了,他们将各派出 $N$ 匹马,每场比赛输的一方需要给赢的一方 200 两黄金,平局的话双方都不比出钱,已知所有马的速度,且齐王的出马顺序永远固定,求田忌的最大收益。 $N\leq 10^3$ 。 $solution:$ 考虑将两个人的马按从大到小排序,发现对于齐王 阅读全文
posted @ 2019-07-27 19:46 siruiyang_sry 阅读(190) 评论(0) 推荐(1)
摘要:异或约数和 题意简述 求 $f_1\space xor\space f_2…\space xor\space f_n$ , $f_i$ 表示 $i$ 的所有约数的异或和。 $n\leq 10^{14}$ 。 $solution:$ 考虑 $xor$ 有结合律与交换律,所以考虑优化给定式子。 对于 $ 阅读全文
posted @ 2019-07-27 13:31 siruiyang_sry 阅读(185) 评论(0) 推荐(0)
摘要:link $solution:$ 好久没写数据结构了,那就写道简单题吧! 可以发现 $m\leq 50$,所以可以去取在 $[l,r]$ 中当价格相同时愉悦值最高的做完全背包 $dp$ 。 发现修改价格与愉悦值修改操作可以在线段树上维护,只要暴力修改在乱搞一下即可。 时间复杂度 $O(nm\log 阅读全文
posted @ 2019-07-17 22:14 siruiyang_sry 阅读(323) 评论(0) 推荐(0)
摘要:solution 阅读全文
posted @ 2019-04-13 21:06 siruiyang_sry 阅读(181) 评论(0) 推荐(0)
摘要:link 题目大意 给你一个含有边权的无向图,问从$S$到$T$经过$N$条边的最小花费。 试题分析 我们可以很容易推导$dp$方程,$dp(k,i,j)$表示经过$k$条边从$i$到$j$的最小花费。则,$dp(k,i,j)=min(dp(k-1,i,p)+dp(1,p,j))$。 而$(i,p) 阅读全文
posted @ 2018-12-21 23:21 siruiyang_sry 阅读(140) 评论(0) 推荐(0)
摘要:link 试题分析 我们发现若是要选馒头的话则应该从馒头售价高的先装。 并且若要选择包装盒时应该选择装x个最小的时候。所以只需要贪心$+$背包即可。 #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> u 阅读全文
posted @ 2018-12-21 22:29 siruiyang_sry 阅读(333) 评论(0) 推荐(0)
摘要:link 试题分析 我们发现普通$dp$时间复杂度为$O(h \times w)$的,会$T$的很惨。而这个又无法通过优化,所以呢就要改变$dp$策略。 观察到$n\leq 2000$,所以我们需要设计出一个关于不能走的$dp$。 part1 排列组合应用 $C_i^j$的意思大家都知道把,但是这道 阅读全文
posted @ 2018-12-19 19:55 siruiyang_sry 阅读(415) 评论(0) 推荐(0)
摘要:link 试题分析 我们发现$dp(t,s1,s2,s3)$表示在$t$时刻$3$个人的位置。发现时间复杂度为$O(n \times L^3)$。不仅会$T$还会$MLE$,所以需要优化$dp$。我们发现当次$dp$合法时,肯定会有一项是到达的那个位置,所以可以优化掉一维。只需要把那个必须要经过的位 阅读全文
posted @ 2018-12-18 20:12 siruiyang_sry 阅读(271) 评论(0) 推荐(0)
摘要:link 试题分析 我们发现此题是一个十分简单的多重背包。但是按照朴素写法会超时。所以要去考虑优化。 我们发现我们若$W=7$,可以拆成$1+2+4$,不用每次$1+1+1+1+1+1+1$,从$N$级就变成$log$级了。所以对于每一组$(w_i,c_i)$,我们都可以拆成多个二进制数,然后暴力去 阅读全文
posted @ 2018-12-18 19:13 siruiyang_sry 阅读(124) 评论(0) 推荐(0)
摘要:link 题目大意 给你一个长度为$n$的数字串,其中$-1$的表示可以填$1$~$k$中任意一个数,其余数的范围也是从$1$~$k$。而对于连续$len$个数都不是相等的。问有多少种方案。 试题分析 容易发现此题是一个计数类$dp$。我们定义$f(i,j)$表示第$i$位选$j$的方案数,$ans 阅读全文
posted @ 2018-12-17 19:04 siruiyang_sry 阅读(391) 评论(0) 推荐(0)
摘要:link 其实就是一个比较简单的$IOI$题。简单$dp$就行,设$5$维$dp$即可 最后在滚动一下,判一下可行性即可。 #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> using namespac 阅读全文
posted @ 2018-12-08 13:57 siruiyang_sry 阅读(157) 评论(0) 推荐(0)
摘要:link 其实就是再问你在任意行或列棋子数量不超过$2$,所以考虑$dp$维护这个结论 我们可以直接限制行,开维限制列,所以设$dp(i,j,k)$为前$i$行有$j$列有$1$个棋子,有$k$列有$2$个棋子 然后分类讨论一下这行取一个,两个,或者不取的个数。最后累加即可 详情见代码 #inclu 阅读全文
posted @ 2018-12-08 10:08 siruiyang_sry 阅读(158) 评论(0) 推荐(0)
摘要:第一次考$NOIP$的我已经自闭了 $CCF$告诉我们了一件事情,要对自己写的程序有信仰,相信$CCF$的数据是水的 普及组: 分数:$100+100+30+100=330$ $1.titile$: $cin$,$scanf$都试了试,却没有$A$掉第二个样例,最后$getchar()$$5$次$A 阅读全文
posted @ 2018-11-14 20:40 siruiyang_sry 阅读(420) 评论(6) 推荐(2)
摘要:题目 官方题解 T1: 一道水题 #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> #include<stack> using namespace std; inline 阅读全文
posted @ 2018-11-06 13:02 siruiyang_sry 阅读(115) 评论(0) 推荐(0)
摘要:link 我们可以很容易的推断出$-1$是单调不降的,若$i>j$且$a_i$与$a_j$都没有填数,若填完之后$a_i>a_j$或者$a_i<a_j$,则对答案产生影响的只在$[i,j]$之间,则$a_i<a_j$对答案产生的贡献更小,则其实每个不同位置的$-1$其实是互不影响的,所以就可以用$d 阅读全文
posted @ 2018-11-05 09:45 siruiyang_sry 阅读(221) 评论(0) 推荐(0)