東京大学 情報理工学系研究科 コンピュータ科学専攻 2016年8月実施 専門科目II 問題3
Author
祭音Myyura (co-authored with GPT 5.6 SOL)
Description
给定两两不同的数列 A=(a1,…,an)。保持下标递增而抽取的序列称为子列;其值严格递增或严格递减时,分别称为递增子列或递减子列。
(1)求 A0=(5,2,3,9,6,8) 的一个最长递增子列。
对每个 i,令 Si 为以 ai 结尾的所有递增子列之集,ℓi 为其中最长者的长度。
(2)对 A0 求 ℓ1,ℓ2,ℓ3,ℓ5,ℓ6。
(3)对一般的 A,设最长递增子列长度为 ℓ;对 m=1,…,ℓ,令
dm=∣{i∣ℓi=m}∣。证明存在 m 使 dm≥n/ℓ。
(4)证明 A 的最长递减子列长度不少于 n/ℓ。
(5)证明:任意长度为 n 且元素两两不同的数列,必有长度不少于 n 的递增子列,或长度不少于 n 的递减子列。
Kai
(1)
一个最长递增子列为
(2,3,6,8).
其长度为 4。
(2)
逐项使用递推式
ℓi=1+max{ℓj∣j<i, aj<ai},
空集的最大值按 0 计。得到
(ℓ1,ℓ2,ℓ3,ℓ4,ℓ5,ℓ6)=(1,1,2,3,3,4).
故所求为 ℓ1=1,ℓ2=1,ℓ3=2,ℓ5=3,ℓ6=4。
(3)
每个 ℓi 恰为 1,…,ℓ 中的一个值,故
m=1∑ℓdm=n.
由平均值原理,至少存在一个 m 满足 dm≥n/ℓ。
(4)
固定(3)中这样的 m,按下标递增排列所有满足 ℓi=m 的项。若其中 i<j 且 ai<aj,则可把 aj 接在以 ai 结尾、长度为 m 的递增子列之后,从而 ℓj≥m+1,矛盾。
各项两两不同,故必有 ai>aj。因此这些项按原顺序构成长度
dm≥ℓn
的递减子列。
(5)
若 ℓ≥n,最长递增子列已经满足要求。若 ℓ<n,由(4),最长递减子列长度至少为
ℓn>n.
故两者至少有一个长度不小于 n。