zoukankan      html  css  js  c++  java
  • POJ 3267 The Cow Lexicon 简单DP

    题目链接: http://poj.org/problem?id=3267

    从后往前遍历,dp[i]表示第i个字符到最后一个字符删除的字符个数。

    状态转移方程为:

    dp[i] = dp[i+1] + 1;                                                 //当不能匹配时

    dp[i] = std::min(dp[i], dp[msg] + (msg-i) - len[j]);  //当匹配时。

    第i个字符到第msg个字符之间一共有msg-i个字符,减去字典中单词的长度,就是删除的字符数量。

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <algorithm>
     4 int n, m, dp[610], len[610];
     5 char s[610], dic[610][30];
     6 int main()
     7 {
     8     while(scanf("%d %d", &n, &m) != EOF)
     9     {
    10         scanf("%s", s);
    11         for(int i = 0; i < n; i++)
    12         {
    13             scanf("%s", dic[i]);
    14             len[i] = strlen(dic[i]);
    15         }
    16         dp[m] = 0;
    17         for(int i = m-1; i >= 0; i--)
    18         {
    19             dp[i] = dp[i+1] + 1;
    20             for(int j = 0; j < n; j++)
    21             {
    22                 if(s[i] == dic[j][0] && m-i >= len[j])
    23                 {
    24                     int msg = i+1, cnt = 1;
    25                     while(msg < m && dic[j][cnt])
    26                     {
    27                         if(s[msg++] == dic[j][cnt])
    28                             cnt++;
    29                     }
    30                     if(cnt == len[j])
    31                         dp[i] = std::min(dp[i], dp[msg] + (msg-i) - len[j]);
    32                 }
    33             }
    34         }
    35         printf("%d
    ", dp[0]);
    36     }
    37     return 0;
    38 }
    View Code
  • 相关阅读:
    Django模型层进阶
    Django模型层相关
    BOM与DOM
    JavaScript入门
    HTML基础
    子查询/联合分组/all与any/视图/事务
    表的查询
    mysql的多表关系
    Mysql基本操作
    Spider_基础总结2_Requests异常
  • 原文地址:https://www.cnblogs.com/wolfred7464/p/3252321.html
Copyright © 2011-2022 走看看