2282 - 【基础背包入门3.1】单词的划分

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

 

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

题目输入

 第一行,一个字符串。(字符串的长度不超过100

第二行一个整数n,表示单词的个数。(n<=100

3~n+2行,每行列出一个单词。

题目输出

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

输入/输出样例

输入格式

realityour
5
real
reality
it
your
our

输出格式

2

C++解答

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char st[110];
char s[110][110];
bool tf(int x,int y)
{
    for(int i=strlen(s[y])-1;i>=0;i--)
       if (st[--x]!= s[y][i]) return 0;
    return 1;
}
int main()
{
    int n;
    gets(st);
    scanf("%d",&n); 
    for(int i=0;i<n;i++) scanf("%s",s[i]);
    int f[110];   f[0]=0;
    for(int i=1;i<=strlen(st);i++)
    {
        f[i]=100;
        for(int j=0;j<n;j++)
          if( strlen(s[j])<=i)
            if(f[i]>f[i-strlen(s[j])]+1)
              if(tf(i,j))
                   f[i]=f[i-strlen(s[j])]+1;
    }
    printf("%d\n",f[strlen(st)]);
    return 0;
}