C. 字符序列

简要题意:有一个函数 f(c,s)=cs1cs2cs3csnc。给出操作序列 ci,每次操作使 s=f(ci,s)s 开始为空串),求最后的字符串中有多少个本质不同的子序列。

数据范围: n500

首先我们可以考虑一个简化经典问题,已知一个字符串,求本质不同的子序列数量。

因为我们需要把所有本质不同的子序列在字符串中找到唯一的映射,所以我们贪心的钦定每个字符都取字符串中第一个出现的,而不取第二次出现的。

可设 fi,j 表示考虑完了 in 的字符,开头为 j 的本质不同子序列数量。

fi,j={fi+1,jaijcfi+1,c+1ai=j

假如已知这个字符串,O(N||) 转移即可。放在这题中可以得到 50pts。

考虑正解,显然字符串非常大,无法求出,我们观察每次操作的字符串之间有什么规律。

a
bab
cbcacbc
dcdbdcdadcdbdcd

我们容易发现,若设 Tiin 操作后的序列,那么字符串的变化可以写成 Ti=Ti+1+ci+Ti+1。最终字符串即为 T1

回到 dp,转移方程为求和的形式,只由 i+1 转移过来,容易写成矩阵转移的形式,虽然在已知字符串的情况下复杂度为 O(N||3),但是它不需要顺推,在对于有规律的字符串变化中可以直接矩阵转移。

复杂度为 O(n||3)

posted @   Fire_Raku  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示