最長公共子序列求方案數

光風霽月發表於2024-03-20

題目連結

參考

在最長公共子序列問題中,狀態的劃分有兩類:

  1. a[i]==b[j]
    f[i][j]=f[i-1][j-1]+1;
  2. a[i]!=b[j]
    f[i][j]=max(f[i-1][j],f[i][j-1],f[i-1][j-1])

不過,考慮到f[i-1][j-1]可以透過f[i-1][j]或f[i][j-1]轉移而來,我們通常將a[i]!=b[j]時的轉移方程寫為 f[i][j]=max(f[i-1][j],f[i][j-1])
可以發現,但在這種劃分方式中,我們僅僅做到了不漏,而沒有做到不重,因為f[i-1][j]和f[i][j-1]都包含了f[i-1][j-1]
因此在求方案數時,就有了一個大坑

相關文章