codeforces 2100左右的dp题 做题记
可能是跳着做的
1|0CF1271D Portals
发现,一个点要派遣,一定是在最后能派遣的地方派遣,就设一个dp,
2|0CF980D Perfect Groups
奇怪题,跟dp似乎没有关系,直接分解质因数,保留指数为基数的素数,求出乘积,每次加一个点,看区间内有没有乘积等于当前点的组,有就不变,没有就加,特判0即可
3|0CF213C Relay Race
设
4|0CF1202C You Are Given a WASD-string...
还是和dp没有关系,发现可以分别讨论一个位置向各个方向走对答案的影响,然后计算即可
5|0CF547B Mike and Feet
还是无关,算出每个数前面的第一个小于它的数的位置,后面的也算出,然后统计一下即可
6|0CF710E Generate a String
终于是dp了,一个数必定不会被连续删除两次,因为这样就可以在乘的前面删一次达成效果,可以设出dp:
7|0CF1271E Common Number
考虑把一个数拆成二进制,然后发现,一个数x在y的路径中当且仅当x是y的前缀或把相同长度的前缀的最后面的1(如果为奇数)减掉后x为前缀的数y,那么,奇数和偶数分别有单调性,二分,奇数查当前数,偶数就查当前数和当前数加1即可
8|0CF840B Leha and another game about graph
感觉是图论,考虑把图的dfs生成树给搞出来,容易发现,我们从底向上调整,最后只会导致根不合法
如果整个图中有-1,那么那个点到根的路径的每个点的父边都取反,那么就容易做到合法
如果没有,我就直接猜了一个结论,因为返祖边会导致环,而且只有环内的点可以有父边取反且环的头不可以父边取反,由于返祖边不会超过根,就一定不能做到合法,这样并不是很严谨
正确的思考方式是由于一条边会增加两个度数,所以所有的点的最终度数
9|0CF1151E Number of Components
联考原题(弱化版),性质:连通块数=点数减去边数,先求出1到所有点的答案,然后看删除点的贡献,这个直接讨论相邻的点即可,注意,连一起的要删的要看作同一个
10|0CF837D Round Subset
简单题,发现只有2,5会造成贡献,把数拆了后做一个类似背包的东西,
11|0CF963B Destruction of a Tree
感觉可以啊,1h切了,发现一个点的子树是独立的,那么只用讨论父边选不选,这个可以dp,设
12|0CF771C Bear and Tree Jumps
设
13|0CF16E Fish
感觉是一道十分常规的状压dp,设
14|0CF900D Unusual Sequences
感觉很神奇,尝试想过没想出来,只能看题解
首先常规转化成
然后设
算一下时间复杂度,由于x的因子的因子一定是x的因子,所以最多会有
15|0CF27E Number With The Given Amount Of Divisors
自己想出来了
首先,设最小的数为T,它的分解为
而要最小,那么a一定是单调不增的,因为如果增了,换一下位置一定更优
而由于
16|0CF128C Games with Rectangle
一道简单题,但我没想出来
首先,有一步最简单的转化,行和列是无关的,这是显然的
那么就可以把二维转成一维,倒着处理,设
但还有更简单的,答案就是
考虑随机撒
17|0CF621E Wet Shark and Blocks
一道难度还好的题,没什么细节
首先看到次数小于等于1e9,看能否用矩阵乘法
先考虑朴素dp,
转移:
显然,这是可以矩乘的,直接构造一个x\times x的矩阵然后快速幂即可
18|0CF768D Jon and Orbs
首先设计dp,
至于天数,由于p<=1000,由于这题概率的倒数就是期望次数,累加就成了
19|0CF1265E Beautiful Mirrors
一道经典的期望dp题
首先,根据套路,我们发现正着不好推(其实是我不会),于是考虑倒着推,设
每一步有两种:走到i+1或1,写成转移就是
但我们发现并不知道
我们要求的就是
我们先把f1的式子写出,化简可得:
再根据这个,把
然后
20|0CF505C Mr. Kitayuta, the Treasure Hunter
sb题,还降至了
直接
21|0CF119C Education Reform
简单题,发现差值很小,就把暴力的状态改一下即可
22|0CF786A Berzerk
首先,博弈论理论:如果一个状态的后继有必败态,那它就是必胜态,否则必败
然后就可以从第一个点开始倒推,如果当前点必败就把所有能走到它的点变成必胜,否则如果所有能走到的状态都走完了且必胜,标记成必败
23|0CF14E Camels
随便dp一下
24|0CF351B Jeff and Furik
我们分别考虑两个人的操作,A要尽量早,所以肯定每次减少一个逆序对
B有二分之一的概率减少一个,二分之一增加一个
所以一步期望减少一个逆序对
所以总的期望就是逆序对数乘二,如果逆序对数为奇数就减一,A操作后就结束了
25|0CF1030E Vasya and Good Sequences
一道板但有意思的题
首先,我们只关心二进制下1的个数的奇偶性,0没有影响,如果1的个数为奇数就一定无法达成需求
但如果有一个数,1的个数超过了当前区间的1的个数的一半,那么其他的就无法补全,就不合法
要求1的个数为偶数可以直接用桶
由于a>0,所以如果1的个数超过区间的一半,区间长度一定小于64,直接遍历然后check即可
26|0CF372B Counting Rectangles is Fun
简单题,求出前缀和,然后搞一个
27|0CF165E Compatible Numbers
一道很有意思的题
首先,要&之后为0,如果当前位是0,另一个数0/1都可以,如果当前位是1,就只能填0
发现了一个有趣的性质:其实合法的x就是当前的数按位取反的子集,这个完美符合上面的条件
然后就做一个很像状压的把所有的都更新到然后对于每一个数,随便记录一个满足的即可,然后对每一个a判断即可
28|0CF510D Fox And Jumping
一道有意思的题
首先根据裴蜀定理,如果
而题目的条件实际上就是要通过若干操作向右/左移动一格,这样一定可以走到所有格子
那么只需要找到若干数,它们的gcd为1,那么就一定可以构造一组解
考虑用最短路算法,每次的gcd就转移到下一个状态,用map存即可,因为质因子不多所以复杂度是对的
__EOF__

本文链接:https://www.cnblogs.com/longzhaocheng/p/17895507.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术