一句话题解集——口胡万岁

最近还是做了不少题的,但发现好久没写东西了,就打算把之前的题目随便口胡了得。发现神仙题还是蛮多的,慢慢更……

已经摆明是一句话题解了,所以一行一题很正常,不要见怪

主要给自己看的,其他人当题目推荐看得了

没有顺序,难度绿至黑(可能为恶评)

P3205 [HNOI2010]合唱队

算法:区间dp

容易发现每次一定从某一个数开始向左或右扩展。

那么设出dp方程:\(dp[l][r][0/1]\) 为扩展到区间 \([l,r]\) 最后一次是向左或右扩的方案数

如果 \(a[l]<a[l+1]\) 就可以从上一步向左扩展为 \([l+1,r]\) 扩展,即从 \(f[l+1][r][0]\) 扩展

如果 \(a[l]<a[r]\) 就可以从上一步向右扩展为 \([l+1,r]\) 扩展,即从 \(f[l+1][r][1]\) 扩展

同理 \(r\) 的情况

最后答案即为 \(f[1][n][1]+f[1][n][0]\)

P4513 小白逛公园

傻逼题,最大子段和,注意有个细节,询问有可能 \(x<y\) 。(卡了好久)

用来凑蓝题数的

P3431 [POI2005]AUT-The Bus

很容易想到的树状数组优化dp ,基础题。离散化+树状数组+dp

用来凑蓝题数的

P3052 [USACO12MAR]Cows in a Skyscraper G

港真,刚看到题傻了一下,以为是什么优化dp啥的,一看数据范围 \(n\leq 18\) ,好了,状压没跑了

最直接的想法是直接设 \(f[i]\) 表示当前状态为 $i $ 的最小分组数。

但想想转移,发现我们还要知道还剩的电梯空间,于是我们再记一个 \(g[i]\) 数组表示当前状态下最后一个电梯的剩余体积。因为状压dp是从部分转移到整体,所以不用考虑除最后一个电梯的其他电梯。

剩下转移十分简单,不多赘述

P2606 [ZJOI2010]排列计数

这题好像还不是很懂,以后补

CF1398E Two Types of Spells

模拟赛题,练数据结构,开了一个线段树,两个可删堆,轻松过了。

CF1271E Common Number

感觉挺神仙的,刚开始完全想不到

感觉一两句话讲不清啊,主要是分奇偶讨论,找性质,看看题解比较好

P6098 [USACO19FEB]Cow Land G

傻逼题,树剖板子,用来水蓝题的

P4092 [HEOI2016/TJOI2016]树

一个简单转化成树剖的题,权值为深度(打标记时再加),每次询问点到根的权值max,再来求编号。

用来水蓝题的

P2839 [国家集训队]middle

黑题\se 其实是这类题里一个套路,如果没做过这种套路题可能比较难想。

就是这种左右端点各在一个区间的题

还有就是区间中位数:二分一个答案mid,把所有>=mid的数值设成1,<mid的值设为-1

查询区间内的和是否>=0(这个题是>=0,题意中,偶数项的中位数是中间的那两个靠后的那一个)

是,中位数应该更大,否则,中位数只能更小。

但这题区间不确定,但无论如何区间 \([b+1,c-1]\) 是必选的

要让中位数尽可能大,\(1\)的数量要尽可能多

于是找区间 \([a,b]\) 的最大后缀和区间 \([c,d]\) 最大前缀

这两值再加上区间 \([b+1,c-1]\) 的和即为对于当前二分的中位数 \(mid\) 的最大的和,进行判断即可

但我们要对每一个二分的值 \(mid\) 都建一棵线段树。

线段树以区间下标为下标,记录区间和,区间最大后缀,最大前缀。

空间炸了。所以使用主席树

发现,对于mid变成mid+1,只有值为mid的数的值会从+1变成-1.

主席树在前者的基础上暴力修改。每一个数就会改一次,所以均摊logn空间。

是道好题,要好好研究!

CF438D The Child and Sequence

势能线段树板子,单点修改,不虚,没做过大概比较难想

参考区间开根

P1438 无聊的数列

线段树+差分。考虑将等差序列变为差分,就转化为区间加,查询区间和的问题了,线段树轻松维护

P4588 [TJOI2018]数学计算

zkw线段树乱搞(不大想写)

CF343D Water Tree

树剖板子,水题专用

P2851 [USACO06DEC]The Fewest Coins G

这是我模拟赛用的题,附上题解

11.24 模拟赛题解

以及接下来的两题

P5522 [yLOI2019 ] 棠梨煎雪

11.24 模拟赛题解

P2949 [USACO09OPEN]Work Scheduling G

11.24 模拟赛题解

P2085 最小函数值

单调队列板子,用来重温单调队列的

P2707 Facer帮父亲

单队,思维题

我们将收益表达出来是\(v = ax - bx^2\) 这是一个二次函数,在二次函数的对称轴之前函数单调递增但斜率不断变小,及\(x\)每增加\(1\)所增加的\(v\)会不断变小。因此我们将所有当前门票增加所增加的收益放进大根堆里,贪心每次加最大的那个,重新计算后加入堆。

P4404 [JSOI2010]缓存交换

贪心题,一时半会儿讲不清,以后补

P3599 Koishi Loves Construction

神仙题,思维题,我讲不清,看第一篇题解,讲得很好

P3514 [POI2011]LIZ-Lollipop

神仙题,思维题,刚看感觉很简单,但就是想不到。

我们考虑从值\(x\)的角度出发。有以下结论:

如果有一个子串和为x,那么一定有一个子串和为x-2

具体证明很简单,不多赘述

那么我们找出一个最大的可以构造出来的奇数和偶数,然后通过他们俩分别推出其他数的区间。对于一个数 \(x\)\(l[x]\)\(r[x]\) 分别表示组成 \(x\) 的区间左右端点。

整一个序列和是一个奇数或偶数,那么从左至右第一个\(1\)到最右的区间和为另一种的最大值(也可能为从右至左第一个\(1\)到最左的区间和),就那个意思,明白就好

之后对每一个询问 \(O(1)\) 输出即可。

P2569 [SCOI2010]股票交易

单调队列优化dp题

容易想到朴素dp状态:设 \(f[i][j]\) 为第 \(i\) 天后拥有 \(j\) 张股票可以赚到的最多钱数

\(4\) 种情况转移:以下方程自动取 \(max\)

1.凭本买,直接赋值:\(f[i][j]=-ap_i × j\)

2.不买不卖,直接由上一天转移:\(f[i][j]=f[i-1][j]\)

3.买股票,从 \(i-w-1\) 天转移过来,之所以不用从其它天,是因为情况 \(2\) 已经让 \(i-w-1\) 天继承了之前所有的最优情况 。还要再枚举一个 \(i-w-1\) 天拥有的股票数 \(k\) 。得到转移方程:\(f[i][j]=f[i-w-1][k]-(j-k)×ap_i\ \ (j-as_i\leq k < j)\)

4.卖股票,和\(3\)类似,转移方程为:\(f[i][j]=f[i-w-1][k]+(k-j)×bp_i\ \ (j<k\leq j+bs_i)\)

----分割线----

这样时间复杂度为 \(O(T×{MaxP}^2)\) ,不能通过本题,要使用单调队列优化

\(3\)种情况方程可化为:\(f[i][j]=max(f[i][j],f[i-w-1]+k×ap_i)-j×ap_i\)

\(4\)种情况方程可化为:\(f[i][j]=max(f[i][j],f[i-w-1]+k×bp_i)-j×bp_i\)

以上方程符合单调性优化条件,故使用单调性优化。

对了,还有一个细节,是第 3 种情况转移应该顺序,第 4 种情况转移应该逆序,这个不难理解,先自己想想吧。

代码还是要好好理解的,用来领悟单调队列不错的题。

提交记录

posted @ 2020-11-26 20:49  Hastieyua  阅读(134)  评论(0编辑  收藏  举报