題目連結
參考
在最長公共子序列問題中,狀態的劃分有兩類:
- a[i]==b[j]
f[i][j]=f[i-1][j-1]+1; - 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]
因此在求方案數時,就有了一個大坑