这里给一种很新的状态设计模式,比前三篇题解的思路好想:
设 dpi,j 表示当前考虑到已经删过数的数列的第 i 位,匹配到原数列的第 j 位。
- 选 j。即比较 i 是否等于 aj 。
- 不选。只需要从上一个状态转移即可。
综上,可得到状态转移如下:
dpi,j=max(dpi−1,j−1+[a[j]==i],dpi,j−1)
代码也比前三篇题解好写:
for(int i=1;i<=n;++i){
for(int j=i;j<=n;++j){
dp[i][j]=max(dp[i-1][j-1]+(a[j]==i),dp[i][j-1]);
ans=max(ans,dp[i][j]);
}
}
诸位仙侠巨佬,请勿刷 tlqtj
等诸如此类了。