2021.09.27am

9.27AM

预期 实际
A 100 50
B 100 100
C 100 100
D 20 35
E 50 20
S 370 305

可能水,一定菜

A Largest Rectangle in a Histogram \(\blacktriangle\)

  1. 单调栈模板题。

B 没有上司的舞会 \(\blacktriangle\)

  1. 一道简单的树形 DP 。之前还做过一道三个状态的
  2. 明显有这样一个关系:选父亲就不能选儿子,不选父亲可以选儿子。 2-SET
  3. 那么我们就得到了DP方程(0表示不选,1表示选):

\[\begin{aligned} dp[fa][0]&=\sum \max(dp[son_i][0],dp[son_i][1])\\ dp[fa][1]&=\sum dp[son_i][0]\\ \end{aligned} \]

C 阶乘分解 \(\blacktriangle\)

  1. 由于是分解成质因数,并且是 \(N!\) ,所以必须得有线性求质数。
  2. 在求质数的同时我们要统计答案。这个有两种做法:
    -先说我自己的: \(1~N\)\(k\) 的倍数共有 \(\frac Nk\) 个,那么每次找到一个质数,它的总出现次数为\(\frac N k+\frac {N}{k^2}+···\),时间复杂度\(O(\frac{n\log n}{\ln n})\)
    • 再说另一种:利用了欧拉筛的性质:每个数都会乘上质数表内的数,每个合数都从质数表扩展而来,那只要每次扩展的时候增加乘的质数的次数,答案就不会漏掉。时间复杂度\(O(n)\)

D 欧拉回路 \(\blacktriangle\)

  1. \(RT\),不过数据很坑(没有SP)。
  2. 欧拉回路无向图要求是每个点出度(或入度)为偶数,有向图则要求出度等于入度。
  3. 访问欧拉回路时要涉及到删边操作,不然T的概率很大。
  4. 直接打上标记不跑只能保证不错,但肯定还是会T。不过其实也蛮好实现:
	int i=head[x];//要访问的第一条边
	while(pan[i])i=e[i].nx;//这条边被标记了,跳过
	if(i==0)return;//删完了
	head[x]=i;//修改第一条边为第一条没有标记的边

E 括号配对 \(\blacktriangle\)

  1. 其实蛮简单一道区间DP,考试写挂了····。
  2. \(dp[i][i+k]\) 表示 \(i\)\(i+k\) 区间内需要添多少个。

\[\begin{aligned} dp[i][i+k]&=\min(dp[i][i+k],dp[i+1][j+k+1])\\ dp[i][j+k]&=\min(dp[i][i+k],dp[i][j]+dp[j+1][i+k]); \end{aligned} \]

image
\(\cal {Made} \ {by} \ {YuGe}\)

posted @ 2021-09-27 14:07  u2003  阅读(21)  评论(0)    收藏  举报