考
虑
用
总
的
回
文
串
数
减
去
非
重
复
回
文
串
数
。
实
现
用
区
间
D
P
考虑用总的回文串数减去非重复回文串数。实现用区间DP
考虑用总的回文串数减去非重复回文串数。实现用区间DP
1.
f
[
i
]
[
j
]
表
示
[
i
,
j
]
中
回
文
串
个
数
(
可
重
复
)
1.f[i][j]表示[i,j]中回文串个数(可重复)
1.f[i][j]表示[i,j]中回文串个数(可重复)。
f
[
i
]
[
j
]
=
{
1
i
=
j
f
[
i
]
[
j
−
1
]
+
f
[
i
+
1
]
[
j
]
+
1
s
[
i
]
=
s
[
j
]
f
[
i
]
[
j
−
1
]
+
f
[
i
+
1
]
[
j
]
−
f
[
i
+
1
]
[
j
−
1
]
s
[
i
]
≠
s
[
j
]
f[i][j]=\begin{cases} 1&i=j\\f[i][j-1]+f[i+1][j]+1&s[i]=s[j]\\f[i][j-1]+f[i+1][j]-f[i+1][j-1]&s[i]\ne s[j]\end{cases}
f[i][j]=⎩⎪⎨⎪⎧1f[i][j−1]+f[i+1][j]+1f[i][j−1]+f[i+1][j]−f[i+1][j−1]i=js[i]=s[j]s[i]=s[j]
2.
g
[
i
]
[
j
]
表
示
[
i
,
j
]
中
非
重
复
回
文
串
的
个
数
。
n
e
x
[
i
]
表
示
s
[
n
e
x
[
i
]
]
=
s
[
i
]
且
(
i
,
n
e
x
[
i
]
)
中
不
存
在
j
使
得
s
[
i
]
=
s
[
j
]
。
p
r
e
[
i
]
同
上
。
2.g[i][j]表示[i,j]中非重复回文串的个数。nex[i]表示s[nex[i]]=s[i]且(i,nex[i])中不存在j使得s[i]=s[j]。pre[i]同上。
2.g[i][j]表示[i,j]中非重复回文串的个数。nex[i]表示s[nex[i]]=s[i]且(i,nex[i])中不存在j使得s[i]=s[j]。pre[i]同上。
g
[
i
]
[
j
]
=
{
1
i
=
j
g
[
i
]
[
j
−
1
]
+
g
[
i
+
1
]
[
j
]
−
g
[
i
+
1
]
[
j
−
1
]
s
[
i
]
≠
s
[
j
]
2
∗
g
[
i
+
1
]
[
j
−
1
]
+
2
s
[
i
]
=
s
[
j
]
,
(
i
,
j
)
中
s
[
i
]
没
有
出
现
2
∗
g
[
i
+
1
]
[
j
−
1
]
+
1
s
[
i
]
=
s
[
j
]
,
(
i
,
j
)
中
s
[
i
]
出
现
一
次
2
∗
g
[
i
+
1
]
[
j
−
1
]
−
g
[
n
e
x
[
i
]
+
1
]
[
p
r
e
[
j
]
−
1
]
s
[
i
]
=
s
[
j
]
,
(
i
,
j
)
中
s
[
i
]
出
现
两
次
及
以
上
g[i][j]=\begin{cases}1&i=j\\g[i][j-1]+g[i+1][j]-g[i+1][j-1]&s[i]\ne s[j]\\2*g[i+1][j-1]+2&s[i]=s[j],(i,j)中s[i]没有出现\\2*g[i+1][j-1]+1 &s[i]=s[j],(i,j)中s[i]出现一次\\2*g[i+1][j-1]-g[nex[i]+1][pre[j]-1] &s[i]=s[j],(i,j)中s[i]出现两次及以上\end{cases}
g[i][j]=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧1g[i][j−1]+g[i+1][j]−g[i+1][j−1]2∗g[i+1][j−1]+22∗g[i+1][j−1]+12∗g[i+1][j−1]−g[nex[i]+1][pre[j]−1]i=js[i]=s[j]s[i]=s[j],(i,j)中s[i]没有出现s[i]=s[j],(i,j)中s[i]出现一次s[i]=s[j],(i,j)中s[i]出现两次及以上
答
案
为
f
[
1
]
[
n
]
−
g
[
1
]
[
n
]
答案为f[1][n]-g[1][n]
答案为f[1][n]−g[1][n]
子序列非重回文串
最新推荐文章于 2022-03-05 21:52:52 发布