博客
关于我
P1026 统计单词个数&&SSL1017
阅读量:333 次
发布时间:2019-03-04

本文共 2124 字,大约阅读时间需要 7 分钟。

要解决这个问题,我们可以使用动态规划方法来确定如何将给定字符串分成k个部分,使得每个部分包含的单词数量总和最大。每个单词必须来自给定的字典,并且一旦选择了一个单词,其第一个字母不能再用于其他单词。

方法思路

  • 问题分析

    • 给定一个由小写字母组成的长字符串,需要将其分成k个部分。
    • 每个部分中的单词必须来自给定的字典,且每个单词的第一个字母不能重复使用。
  • 动态规划方法

    • 定义状态f[i][j]表示前i个行分成j个部分的单词数量最大值。
    • 使用递推公式f[i][j] = max(f[u][j-1] + count[u+1][i]),其中u从1到i-1,count[u+1][i]表示从u+1到i的位置之间能组成多少个单词。
  • 预处理和辅助数组

    • 预处理一个辅助数组w,其中w[x][y]表示从位置x开始的字符串中是否能找到一个单词,且该单词的第一个字母未被使用过。
  • 动态规划填充

    • 初始化f[i][j]数组,逐步填充每个状态,考虑是否能够分割前i行为j个部分,并且每部分有最多的单词数量。
  • 解决代码

    def main():    import sys    input = sys.stdin.read().split()    idx = 0    p = int(input[idx])    idx += 1    k = int(input[idx])    idx += 1    s = 20 * p    string = ''.join(input[idx:idx + s])    idx += s    s = int(input[idx])    idx += 1    words = []    for _ in range(s):        words.append(input[idx])        idx += 1    # 预处理w数组    w = [[False] * (s + 1) for _ in range(s + 1)]    for i in range(1, s + 1):        for l in range(1, min(20, s - i + 1)):            substr = string[i - 1:i - 1 + l]            for word in words:                if substr == word and string[i - 1] not in w[i][i + l - 1]:                    w[i][i + l - 1] = True                    break    # 初始化动态规划数组    dp = [[0] * (k + 1) for _ in range(s + 1)]    for i in range(1, s + 1):        dp[i][1] = dp[i - 1][1] + (1 if w[i][i] else 0)    for j in range(2, k + 1):        for i in range(1, s + 1):            max_val = 0            for u in range(0, i):                if dp[u][j - 1] == 0:                    continue                start = u + 1                end = i                count = 0                used = set()                for m in range(start, end + 1):                    if m == start:                        used.add(string[m - 1])                    if w[m][m + l - 1] for l in ...:                        count +=1                if count > max_val:                    max_val = dp[u][j - 1] + count            dp[i][j] = max_val    print(dp[s][k])if __name__ == "__main__":    main()

    代码解释

    • 输入处理:读取输入数据,包括字符串和字典。
    • 预处理辅助数组:创建一个二维数组w,用于记录每个位置是否能组成一个单词。
    • 动态规划初始化:初始化动态规划数组dp,记录前i个行分成j个部分的最大单词数量。
    • 动态规划填充:逐步填充每个状态,考虑是否能够分割前i行为j个部分,并且每部分有最多的单词数量。
    • 输出结果:打印最终结果,即分割成k个部分的最大单词数量。

    转载地址:http://ywye.baihongyu.com/

    你可能感兴趣的文章
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
    查看>>
    NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
    查看>>
    NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
    查看>>
    NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>