《怎样解题》

有很多题是在多个板块内出现了的,所以看起来多,实际上是垃圾文章。

文章目录

  • 1.动态规划
    • 1.1.状态定义
      • 1.1.1.含量
      • 1.1.2.松紧
      • 1.1.3.思想
    • 1.2.状态转移
    • 1.3.相信我
    • 1.4. U n b e l i e v a b l e ! \tt Unbelievable! Unbelievable!
  • 2.贪心
    • 2.1.基础
    • 2.2.模型
  • 3.数学
    • 3.1.解方程
    • 3.2.推式子
    • 3.3.多项式
    • 3.4.组合数学
    • 3.5.容斥原理
  • 4.从问题入手
    • 4.1.套路
    • 4.2.等价变换
    • 4.3.旁敲侧击
    • 4.4.性质
    • 4.5.特殊化
  • 5.最值(堆)
  • 6.树
    • 6.1.树上路径
    • 6.2.树上容斥
  • 7.奇技淫巧
    • 7.1.离散化
    • 7.2.多源点最短路
    • 7.3.哈希
    • 7.4. S T \tt ST ST表(倍增)
    • 7.5.单调栈
    • 7.6.自变量?因变量!
    • 7.7.部分枚举
    • 7.8.权值分摊
  • 8.构造
    • 8.1.微调法
    • 8.2.特值法
    • 8.3.天马行空!
  • 更新日志
    • 2020 / 1 / 11    u p d a t e \tt{2020/1/11\; update} 2020/1/11update
    • 2020 / 1 / 30    u p d a t e \tt{2020/1/30\; update} 2020/1/30update
    • 2020 / 2 / 4    u p d a t e \tt{2020/2/4\; update} 2020/2/4update
    • 2020 / 2 / 12    u p d a t e \tt{2020/2/12\; update} 2020/2/12update
    • 2020 / 7 / 29    u p d a t e \tt{2020/7/29\; update} 2020/7/29update
    • 20200 / 8 / 9    u p d a t e \tt{20200/8/9\; update} 20200/8/9update

1.动态规划

1.1.状态定义

1.1.1.含量

一个好的状态定义,一定有这样的特点:它注重于通性,而非具体情况

譬如说,求方案数量,很多方案将会被保存在同一个状态里。为什么?因为这些方案在一些地方上是一样的,而且这些地方才是重要的地方,这些地方才会影响后续的行动,这些地方是其精髓。

例1.1.1.1 N e w    Y e a r    a n d    A r b i t r a r y    A r r a n g e m e n t \tt{New\; Year\; and\; Arbitrary\; Arrangement} NewYearandArbitraryArrangement A N D    S e g m e n t s \tt AND\; Segments ANDSegments

例1.1.1.2 CF1151F Sonya and Informatics

当然,肆无忌惮地舍弃掉大量信息,是不可取的。你得保留必要的信息。

例1.1.1.3 战争调度、 C o n n e c t i n g    V e r t i c e s \tt Connecting\; Vertices ConnectingVertices

对于一些附加了“权值”的定义,可能需要一些特殊技巧。

  • 改变递推顺序。
  • 费用提前计算。
  • 分类讨论。

当然,还是那句话,这些东西的本质都是 让影响权值的东西尽量少

例1.1.1.4 小奇探险、命运

例1.1.1.5 E m i y a \tt{Emiya} Emiya 家的饭

例1.1.1.6 简单的 n i m \tt{nim} nim 游戏

不要把很多步骤分开,导致状态数太多。有时候,就要一次性多考虑点东西。

例1.1.1.7 病毒研究

1.1.2.松紧

有的时候,你不得不强制规定一些情况,来便于转移。也就是说,你规定 g ( i ) = f ( i , x i ) g(i)=f(i,x_i) g(i)=f(i,xi) ,以此来减少状态的维度。这往往在试图使用滚动数组时会被自然发现。

例1.1.2.1 划分、小奇探险

更多时候,你让一些状态包揽下原本不属于它的方案。这会使你更快的转移。

例1.1.2.2 奶牛家谱

例1.1.2.3 分裂

1.1.3.思想

你还是得结合该问题的性质去思考一个问题。当方案有特殊性质时,你应该去使用它们。

例1.1.3.1 M a j a \tt{Maja} Maja V a s y a    a n d    M a x i m u m    M a t c h i n g \tt Vasya\; and\; Maximum\; Matching VasyaandMaximumMatching

例1.1.3.2 说无可说、 P a r t y \tt Party Party

例1.1.3.3 C u t l e t \tt Cutlet Cutlet(或许应该放在 1.4.Unbelievable! 里面?)

分类讨论真的很好用。仅仅在互不相干时可行。

例1.1.3.4 宝牌一大堆、皮配

例1.1.3.5 G a m e    o f    t h e    R o w s \tt{Game\; of\; the\; Rows} GameoftheRows

例1.1.3.6 A r p a    a n d    a    l i s t    o f    n u m b e r s \tt{Arpa\; and\; a\; list\; of\; numbers} Arpaandalistofnumbers

有的值很小,就把它放进状态里。不要陷入思维定式。

例1.1.3.7 CF744C Hongcow Buys a Deck of Cards

1.2.状态转移

配合单调队列(单调栈)使用。经典的滑窗、斜率优化皆为此类。

再或者,配合数据结构使用。

例1.2.1 货物分组、 M e m o r y    a n d    C a s i n o s \tt{Memory\; and\; Casinos} MemoryandCasinos

或者是长链剖分(或滚动数组)、树上启发式合并(或 d s u    o n    t r e e \tt dsu\; on\; tree dsuontree )一类的。

例1.2.2 小奇的旅行计划

例1.2.3 洛谷P5291 [十二省联考2019]希望

如果 转移不具有时效性,往往可以贪心,或者钦定一部分元素。

例1.2.4 愤怒的小鸟

排序后,再递推,往往有奇效。用来满足方案的限制条件。

例1.2.5 洛谷P2132 小Z的队伍排列、 R o t a t e    C o l u m n s    ( h a r d    v e r s i o n ) \tt Rotate\; Columns\; (hard\; version) RotateColumns(hardversion)

当然咯,矩乘快速幂、卷积(生成函数)等,就是必备功课了。

例1.2.6 魔法石

例1.2.7 序列计数

例1.2.8 逼死强迫症

例1.2.9 L a d i e s ′    S h o p \tt{Ladies'\; Shop} LadiesShop

例1.2.10 T h e    C h i l d    a n d    B i n a r y    T r e e \tt{The\; Child\; and\; Binary\; Tree} TheChildandBinaryTree

转移的时候,可以枚举某个不会引起算重的值。比如 max ⁡ \max max 等。

例1.2.11 泳池(同时也是多项式优化)

例1.2.12 B o r d e r l e s s \tt{Borderless} Borderless

如果转移有环,可以考虑转化为图论,用最短路求解。

例1.2.13 T h e    G r e a t    M i x i n g \tt The\; Great\; Mixing TheGreatMixing

1.3.相信我

相信 d p \tt{dp} dp ,它是万能的!顶多会超时。

最重要的是发现 独立子问题,最优子结构太好找了,不谈。

例1.3.1 T r a i n    T r a c k i n g \tt{Train\; Tracking} TrainTracking

例1.3.2 守卫

例1.3.3 舞会、 L o g i c a l    E x p r e s s i o n \tt Logical\; Expression LogicalExpression

例1.3.4 B o r d e r l e s s \tt{Borderless} Borderless

例1.3.5 M o o n    C r a t e r s \tt Moon\; Craters MoonCraters

例1.3.6 S h o r t    C o l o r f u l    S t r i p \tt Short\; Colorful\; Strip ShortColorfulStrip

没必要一次 d p \tt dp dp 解决所有问题。

例1.3.7 A r r a y    S h r i n k i n g \tt Array\; Shrinking ArrayShrinking

1.4. U n b e l i e v a b l e ! \tt Unbelievable! Unbelievable!

这要是人类想出来的,我吃 s h i \tt shi shi 好嘛!这里的 s h i \tt shi shi 是食物的食,而不是 。

例1.4.1 机器人高尔夫球赛

例1.4.2 BZOJ4899 记忆的轮廓

例1.4.3 数字

有些不是动态规划的,我懒得改动了,也放这里。

例1.4.4 T a b l e \tt Table Table

2.贪心

2.1.基础

你只要可以放心的说:“把原有的替换,一定不会更差”,你就可以上了。

例2.1.1 推销员、 C u r f e w \tt Curfew Curfew

例2.1.2 三人组舞

例2.1.3 扭动的回文串

或者说,你证明“不影响以后操作”即可。

例2.1.4 春节十二响

有时候最好感性理解一下。当然,如果用归纳法证明出来了,那就是极好的。

例2.1.5 划分

越紧急越优先处理。分配优先级应该是贪心范畴?

例2.1.6 D e a d L e e \tt DeadLee DeadLee

2.2.模型

至今,我觉得最神奇的两个贪心就是:

  • 不守交规
  • 排序后模拟。

例2.2.1 蔬菜

当然咯,说到别的模型,肯定少不了 H a f f m a n \tt{Haffman} Haffman 树(藏在此博客中)。

3.数学

3.1.解方程

暴力解方程并不是一件和听上去一样简单的事情。

例3.1.1 T h e    L u c k i e s t    N u m b e r \tt{The\; Luckiest\; Number} TheLuckiestNumber

例3.1.2 P e r i o d    O f    N u m b e r \tt{Period\; Of\; Number} PeriodOfNumber

例3.1.3 糖果传递

例3.1.4 命运

例3.1.5 C o n t a c t    A T C \tt{Contact\; ATC} ContactATC

3.2.推式子

例3.2.1 等比数列三角形

例3.2.2 幂和

例3.2.3 泰勒板题?

例3.2.4 一个简单的询问

例3.2.5 矩阵

例3.2.6 T r e e \tt{Tree} Tree

例3.2.7 数三角形、洛谷P3271 [JLOI2016]方

例3.2.8 魔法石

例3.2.9 j z p t a b \tt{jzptab} jzptab

例3.2.10 树、 S a s h a    a n d    A r r a y \tt Sasha\; and\; Array SashaandArray

3.3.多项式

往往是优化 d p \tt{dp} dp 而写的生成函数。见 1.2.状态转移

其他情况,全是板子,很难想到。无非就是:

  • 字符串匹配。
  • 母函数(计数用)。
  • 概率生成函数。

例3.3.1 字符串匹配

例3.3.2 巧克力!

例3.3.3 歌唱王国

3.4.组合数学

去重,一直是重大课题。可以考虑 以某种特定的方式将问题拆分(往往适用于动态规划)。

例3.4.1 鸽子的糖

其实,拆分的本质是重组,重组的本质是 生成一组解

例3.4.2 简单的序列问题

还有一些模板。背下来吧!

  • 卡特兰数: S 0 = 1 , S n = C 2 n n n + 1 = C 2 n n − C 2 n n + 1 = ∑ x = 0 n − 1 S x S n − x − 1 S_0=1,S_n=\frac{C_{2n}^n}{n+1}=C_{2n}^{n}-C_{2n}^{n+1}=\sum_{x=0}^{n-1}S_xS_{n-x-1} S0=1,Sn=n+1C2nn=C2nnC2nn+1=x=0n1SxSnx1
  • 卢卡斯定理: C n m   m o d   p = C ⌊ n p ⌋ ⌊ m p ⌋ × C n   m o d   p m   m o d   p ( p ∈ P ) C_n^m\bmod p=C_{\lfloor\frac{n}{p}\rfloor}^{\lfloor\frac{m}{p}\rfloor}\times C_{n\bmod p}^{m\bmod p}(p\in \mathbb{P}) Cnmmodp=Cpnpm×Cnmodpmmodp(pP) P \Bbb{P} P是质数集。
  • 中国剩余定理 C R T \tt CRT CRT

例3.4.3 砖块垒梯

例3.4.4 坏天平

3.5.容斥原理

往往是这样的情形:固定某个值,很难做;限制其范围,很好做

例3.5.1 和谐相处

例3.5.2 C a r d    C o l l e c t o r \tt{Card\; Collector} CardCollector

例3.5.3 洛谷P1450 [HAOI2008]硬币购物

例3.5.4 小星星

例3.5.5 矩阵填数

短短四字,个中奥妙,意蕴深长:正难则反

例3.5.6 序列计数

4.从问题入手

4.1.套路

见到“最小值最大”“最大值最小”就应该注意了。

例4.1.1 J O I O I \tt{JOIOI} JOIOI 王国

例4.1.2 小屁孩领糖吃

有关连通性的问题,可以考虑并查集。

例4.1.3 裁剪线

考虑前 k k k 大的巴拉巴拉,可以用二分法。

例4.1.4 异或粽子

4.2.等价变换

看上去,题目要你求解 x x x ,其实, x x x 本质上就是 y y y ,或者等价于 y y y 。特别是转化为图论。

例4.2.1 算术天才 ⑨ ⑨ 与等差数列

例4.2.2 S o r t    i t    o u t \tt{Sort\; it\; out} Sortitout

例4.2.3 城市地铁规划

例4.2.4 序列

例4.2.5 w w w 的魔术扑克

例4.2.6 劈配

例4.2.7 I I I D X \tt{IIIDX} IIIDX

例4.2.8 庞氏骗局

例4.2.9 B e y o n d \tt{Beyond} Beyond

例4.2.10 七夕祭

例4.2.11 G a m e \tt{Game} Game

例4.2.12 如厕计划

例4.2.13 M a f i a \tt{Mafia} Mafia

例4.2.14 M a x i m u m    M a t c h i n g \tt{Maximum\; Matching} MaximumMatching

例4.2.15 F r e d a \tt{Freda} Freda 的迷宫

例4.2.16 M a g i c    M a t r i x \tt Magic\; Matrix MagicMatrix

例4.2.17 R o o t e r ′ s    S o n g \tt{Rooter's\; Song} RootersSong

例4.2.18 舞会

例4.2.19 T r u c k s    a n d    C i t i e s \tt Trucks\; and\; Cities TrucksandCities

例4.2.20 S h o r t    C o l o r f u l    S t r i p \tt Short\; Colorful\; Strip ShortColorfulStrip

4.3.旁敲侧击

你知道了另一个东西,可以快速推出要求的东西。尽管这两个东西可能看上去毫无干系。

例4.3.1 校长的障碍赛

例4.3.2 A r r a y    S h r i n k i n g \tt Array\; Shrinking ArrayShrinking

4.4.性质

当可行方案(最优方案)一定具有某种特性(单调性……)的时候,千万要注意。

例4.4.1 排列

例4.4.2 T h e    C o w    G a t h e r i n g \tt{The\; Cow\; Gathering} TheCowGathering

例4.4.3 道路设计

例4.4.4 划分

例4.4.5 小凸玩密室

例4.4.6 冒泡排序

例4.4.7 M a x i m u m    M a t c h i n g \tt{Maximum\; Matching} MaximumMatching

例4.4.8 M a x i m i z e ! \tt{Maximize!} Maximize!

例4.4.9 H a p p y    L i n e \tt Happy\; Line HappyLine

例4.4.10 M a z e    1 D \tt Maze\; 1D Maze1D

例4.4.11 S i m p l e    S k e w n e s s \tt Simple\; Skewness SimpleSkewness

例4.4.12 V l a d i k    a n d    c a r d s \tt Vladik\; and\; cards Vladikandcards

4.5.特殊化

明明本质就是另一个问题,但时间复杂度不能通过,为什么?因为它是特殊化的情况。在最小生成树问题中尤甚。显然,我们要去发掘其性质。

例4.5.1 御神渡

例4.5.2 新年的繁荣

5.最值(堆)

堆里面的元素要尽量的少,才能减少复杂度。这要求我们,“在堆外”比较方案

例5.1 奇怪的厨师

例5.2 异或粽子

或者是 避免重复的元素

例5.3 最优卡组

6.树

6.1.树上路径

可以枚举 l c a lca lca (即,点分治)、枚举一条必经边(即,边分治)。或者直接树链剖分。

例6.1.1 路径计数机

例6.1.2 简单的树上问题

例6.1.3 垃圾分类

6.2.树上容斥

树上的容斥(尤其是“方案只可能为连通块”的情况),可以用 ∣ V ∣ − ∣ E ∣ = 1 |V|-|E|=1 VE=1 这一招。

例6.2.1 洛谷P5291 [十二省联考2019]希望

7.奇技淫巧

7.1.离散化

只关心两两大小关系 或者 只需要知道极少的信息就可得到解,而数据量少,可以考虑离散化。

例7.1.1 矩阵填数

7.2.多源点最短路

例7.2.1 旅行者

7.3.哈希

例7.3.1 信竞就是修电脑

例7.3.2 扭动的回文串

7.4. S T \tt ST ST表(倍增)

例7.4.1 英语危机

例7.4.2 J J J 上树

例7.4.3 线段树

7.5.单调栈

例7.5.1 序列

例7.5.2 下雨天

例7.5.3 路由表

例7.5.4 洪流

例7.5.5 稻草人

7.6.自变量?因变量!

比如有 n n n 个数字,我们要枚举 n n n 个数字,我们有另一个方案:枚举值。

例7.6.1 CF662C Binary Table

例7.6.2 洛谷P3704 [SDOI2017]数字表格

7.7.部分枚举

最近发现部分枚举的题不少,还是单独拿出来写一写。

比较经典的名号是折半搜索。其实远不止此类。

例7.7.1 B e a u t i f u l    R e c t a n g l e \tt Beautiful\; Rectangle BeautifulRectangle

例7.7.2 CF799E Aquarium decoration

例7.7.3 CF620D Professor GukiZ and Two Arrays

例7.7.4 CF1006F Xor-Paths

例7.7.5 CF799D Field expansion

例7.7.6 S e l l i n g    S o u v e n i r s \tt Selling\; Souvenirs SellingSouvenirs

例7.7.7 S i m p l e    S k e w n e s s \tt Simple\; Skewness SimpleSkewness

例7.7.8 R e s t o r e    t h e    P e r m u t a t i o n    b y    S o r t e d    S e g m e n t s \tt Restore\; the\; Permutation\; by\; Sorted\; Segments RestorethePermutationbySortedSegments

例7.7.9 D e v e l o p i n g    G a m e \tt Developing\; Game DevelopingGame

7.8.权值分摊

神奇的技巧!比如,将某个贡献放在一个对象上,或者将一个对象上的贡献拆成多个。

例7.8.1 旧词

例7.8.2 洛谷P6622 [省选联考 2020 A/B 卷] 信号传递

例7.8.3 J e f f    a n d    P e r m u t a t i o n \tt Jeff\; and\; Permutation JeffandPermutation

8.构造

构造是很神奇的。很神奇。想的到,简单的一批;想不到,我带你们打。

8.1.微调法

首先生成一个解(或者,只满足部分条件),然后使其不断地更优(或者,逼近其他条件)。

例8.1.1 M a t h \tt{Math} Math

例8.1.2 M a h m o u d    a n d    E h a b    a n d    t h e    x o r \tt{Mahmoud\; and\; Ehab\; and\; the\; xor} MahmoudandEhabandthexor

例8.1.3 挑战 N P − H a r d {\tt NP}\tt{-}{\tt Hard} NPHard

8.2.特值法

取一个特值,马上简单很多。往往是因为这里可以作为 突破口

例8.2.1 C o n g r u e n c e    E q u a t i o n \tt{Congruence\; Equation} CongruenceEquation

例8.2.2 F i v e    D i m e n s i o n a l    P o i n t s \tt{Five\; Dimensional\; Points} FiveDimensionalPoints

例8.2.3 S p a c e    I s a a c \tt{Space\; Isaac} SpaceIsaac

例8.2.4 R e s t o r e    A r r a y \tt Restore\; Array RestoreArray

8.3.天马行空!

求什么就来什么。往往想不到。

例8.3.1 T h e    h a t \tt{The\; hat} Thehat

例8.3.2 D o w n    o r    R i g h t \tt{Down\; or\; Right} DownorRight

例8.3.3 E n c h a n t e d    A r t i f a c t \tt Enchanted\; Artifact EnchantedArtifact

例8.3.4 G u e s s    T h e    R o o t \tt Guess \;The \;Root GuessTheRoot

例8.3.5 J z z h u    a n d    A p p l e s \tt Jzzhu\; and\; Apples JzzhuandApples

例8.3.6 L i t t l e    P o n y    a n d    S u m m e r    S u n    C e l e b r a t i o n \tt Little\; Pony\; and\; Summer\; Sun\; Celebration LittlePonyandSummerSunCelebration

例8.3.7 R e s t o r e    t h e    P e r m u t a t i o n    b y    S o r t e d    S e g m e n t s \tt Restore\; the\; Permutation\; by\; Sorted\; Segments RestorethePermutationbySortedSegments

例8.3.8 CF798D Mike and distribution


那种用白框框框起来的,就是咕咕咕了的博客……

A l w a y s T o B e C o n t i n u e d … Always\quad To\quad Be\quad Continued\quad \dots AlwaysToBeContinued


更新日志

2020 / 1 / 11    u p d a t e \tt{2020/1/11\; update} 2020/1/11update

很久没更新了。感觉自己好弱,要提前退役了。真是糟糕。

2020 / 1 / 30    u p d a t e \tt{2020/1/30\; update} 2020/1/30update

大刀阔斧地对此博客进行修改。差点把自己榨干。

但是有了一大创举:增加了 更新日志 板块,来观察自己的弱小

2020 / 2 / 4    u p d a t e \tt{2020/2/4\; update} 2020/2/4update

为使更新日志不至于过长,只在进行大改动的时候(尤其是加入新版块)才写更新日志。

补充鸽了的博客,就不占地方了。然而这个更新本身也不是大更新啊。

2020 / 2 / 12    u p d a t e \tt{2020/2/12\; update} 2020/2/12update

做了几道构造的题,比较新奇。交互题。

所以加入了 8.构造 板块,希望以后不会一脸懵逼。

2020 / 7 / 29    u p d a t e \tt{2020/7/29\; update} 2020/7/29update

从今天开始可能要断更了。教练并不允许我花时间总结。我能做的就是切题。

希望有一天,在我 O I \tt OI OI 路结束的时候,我看到这篇博客,心中有敬畏之情。

20200 / 8 / 9    u p d a t e \tt{20200/8/9\; update} 20200/8/9update

没有什么话是不能真香的。如果有,那一定是“这句话是谎话”一类的逻辑怪圈。

所以小蒟蒻 J Z M \tt JZM JZM 开始继续努力啦!

你可能感兴趣的:(C++)