zoukankan      html  css  js  c++  java
  • SSL 2297——单词的划分_DP

    Description

    有一个很长的由小写字母组成字符串。为了便于对这个字符串进行分析,需要将它划分成若干个部分,每个部分称为一个单词。出于减少分析量的目的,我们希望划分出的单词数越少越好。你就是来完成这一划分工作的。

    Input

    第一行,一个字符串。(字符串的长度不超过100)
      第二行一个整数n,表示单词的个数。(n<=100)
      第3~n+2行,每行列出一个单词。

    Output

    一个整数,表示字符串可以被划分成的最少的单词数。

    Sample Input

    realityour
    5
    real
    reality
    it
    your
    our
    Sample Output

    2


    纯DP题,比较
    思路主要是枚举长度,再判断这个长度能不能划分更多的单词。


    代码如下:

    var
      s:string;
      a:array[1..100]of string;
      l,f:array[0..100]of longint;
      i,j,k,m,n:longint;
    begin
      readln(s);
      readln(n);
      for i:=1 to n do
        begin
          readln(a[i]);
          l[i]:=length(a[i]);
        end;
      for i:=1 to length(s) do
        begin
          f[i]:=maxlongint;
          for j:=1 to n do
            if l[j]<=i then
              if (copy(s,i-l[j]+1,l[j])=a[j])and(f[i]>f[i-l[j]]+1) then f[i]:=f[i-l[j]]+1;
        end;
      writeln(f[length(s)]);
    end.
  • 相关阅读:
    迷你资源管理器
    简单工厂和单例的一些事
    面向对象的七大原则
    继承和多态的一些事
    体检套餐系统
    信仰
    魔兽争霸系统
    优化MySchool总结习题
    事务,视图及索引
    [LeetCode] Combinations
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412359.html
Copyright © 2011-2022 走看看