B题:

C题:仅由'A','G','C','T',4个字母组成,给定一个字符串S,|S|<=15,给定一个整数m,以m为长度且仅含4种字母的字符串T,求LCS(S,T)为0,1,2,3....|S|,时相应字符串T的数目。

分析:dp+状态压缩

反正我不会这题,也是看了羊神的代码之后才明白这题的思路

下面说说我的理解吧:

由于|S|长度最大为15,所以用一个二进制编码表示是哪些位置上的字母构成LCS,并求相应的数目。

dp[0][st],dp[1][st]记录的是相应字母构成LCS时,T可能的数目,然后一个一个去给T添加字母直到T长度为m。注意先要将某种状态st添加某个字母后变化成另一种状态的转移处理出来。

now[i]表示S中前i个字母和T的LCS长度,添加一个字母后用数组next[i]记录,表示S前i个字母和添加一个字母的T的LCS长度。

预处理时转移方程就是:

next[i] = now[i-1]+1(s[i-1] == da[k])

next[i] = max(next[i-1], now[i]) (s[i-1] != da[k])

这个转移和一般求两个字符串LCS是相同的。

然后就是根据处理出来的转移,一个一个添加字母并且记录数目:

dp[0][st] 添加字母c到达状态st',则此时可能的字符串数目dp[1][st']需要加上前面未添加字母时那部分的数目:

dp[1]st'] += dp[0][st];

代码:

												

最新文章

  1. [CareerCup] 1.1 Unique Characters of a String 字符串中不同的字符
  2. ubuntu处理中文时设置locale
  3. APICloud十一月线下活动(杭州、上海)
  4. python中的enumerate函数
  5. 【深度解析】Google第二代深度学习引擎TensorFlow开源
  6. Linux系统下安装jdbc与tomcat
  7. 笔记:Spring Boot 项目构建与解析
  8. j2EE经典面试题
  9. Luogu2612 ZJOI2012 波浪 DP
  10. Python scrapy - Login Authenication Issue
  11. Python random模块sample、randint、shuffle、choice随机函数
  12. crm作业知识点集合[三]
  13. 【Go】 Go 语言环境安装
  14. 微信小程序如何跳转到另一个小程序
  15. python 集合取最大最小值
  16. 文件读取草稿(excel,csv)
  17. USACO 1.3.4 Prime Cryptarithm 牛式(模拟枚举)
  18. Scrum立会报告+燃尽图 04
  19. java poi解析excel日期为数字的问题
  20. caohaha&#39;s stuff

热门文章

  1. mysql同时向一个表中插入多条数据问题!!见详细
  2. Sqlserver 理解子查询
  3. MyEclipse build path修改问题
  4. Ext.Net学习笔记23:Ext.Net TabPanel用法详解
  5. 常用终端及git命令
  6. 393. UTF-8 Validation
  7. Windows 键盘操作快捷方式积累
  8. Ext 面向对象程序设计 入门篇
  9. jQuery.hhNewSilder 滚动图片插件
  10. jquery图片无缝滚动代码左右 上下无缝滚动图片