数え上げ
式変形で解こうとすると沼にハマる。
すべてのxについて ∑f(x)を計算する→f(x)=yとなるようなxはいくつあるか?
数え上げる対象をうまく類別できるかどうかを考える
類別する方法
Sを部分文字列として含む文字列は、Sを取り出す位置の列の内、辞書順最小であるもので類別できる
ある列が与えられた時に、一意に決まるような量を考える
xから計算できる量の内、最大/最小のものを考えるとうまく行く?
e.g. 最大公約数 辞書順最小
式を組み合わせと見なす
エイシング 2020 F Two Snuke
ドワンゴ 2020 予選 C Cookie Distribution
公式
数列の和
i=1∑ni2=61n(n+1)(2n+1)
Si=∑k=0nkiとおくと、
Si=i+11{(n+1)i+1−j=0∑i−1i+1CjSj}
H(n,m) = 格子上での(0,0)から(n,m)への最短経路の個数と定義すると、
H(n,m)=i=0∑mH(n−1,i)
S(n,m) = n個のものをちょうどm個の空でないグループに分割する方法の個数と定義する時、
S(n+1,m+1)=i=0∑nnCiS(i,m)=i=m∑nnCiS(i,m)
k=0∑nnCk=2n
k=0∑nknCk=n2n−1
包除原理
f(S∪T)=f(S)+f(T)−f(S∩T)
を満たすならば、
集合S1,…,Snがあるとき、
f(1≤i≤n⋃Si)=T⊆{1,…,n}∑(−1)∣T∣f(i∈T⋂Si)