P2031 脑力达人之分割字串

Posted WeiAR

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P2031 脑力达人之分割字串相关的知识,希望对你有一定的参考价值。

P2031 脑力达人之分割字串
字符串dp,f[i]表示主串到第i个字符,最多能分割成多少子串。
f[i]=max(f[i],f[k]+1);k是能匹配到的前一位。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 #include<algorithm>
 5 #include<cmath>
 6 #include<ctime>
 7 #include<set>
 8 #include<map>
 9 #include<stack>
10 #include<cstring>
11 #define inf 2147483647
12 #define For(i,a,b) for(register int i=a;i<=b;i++)
13 #define p(a) putchar(a)
14 #define g() getchar()
15 //by war
16 //2017.10.29
17 using namespace std;
18 char a[310],c[521][310];
19 int n;
20 int la,lb;
21 bool flag;
22 int f[310];
23 int mx;
24 void in(int &x)
25 {
26     int y=1;
27     char c=g();x=0;
28     while(c<0||c>9)
29     {
30     if(c==-)
31     y=-1;
32     c=g();
33     }
34     while(c<=9&&c>=0)x=x*10+c-0,c=g();
35     x*=y;
36 }
37 void o(int x)
38 {
39     if(x<0)
40     {
41         p(-);
42         x=-x;
43     }
44     if(x>9)o(x/10);
45     p(x%10+0);
46 }
47 int main()
48 {
49     cin>>(a+1);
50     la=strlen(a+1);
51     in(n);
52     For(i,1,n)
53     cin>>(c[i]+1);
54     For(i,1,la)
55     {
56         f[i]=mx;
57         For(j,1,n)
58         {
59             flag=false;
60             lb=strlen(c[j]+1);
61             if(lb<=i)
62             {
63             For(k,1,lb)
64             if(a[i-lb+k]!=c[j][k])
65             {
66                 flag=true;
67                 break;
68             }
69             if(!flag)
70             f[i]=max(f[i],f[i-lb]+1);
71             }
72         }
73         if(f[i]>mx)
74         mx=f[i];
75     }
76     o(f[la]);
77      return 0;
78 }

 

以上是关于P2031 脑力达人之分割字串的主要内容,如果未能解决你的问题,请参考以下文章

怎么分割pdf文件,办公达人教你一招

sql SQL - 字串分割回传资料表

委托为什么可以实例化

洛谷 P2025 脑力大人之监听电话

课后作业之字串加密动手动脑

如何从 RCNN 中裁剪分割的对象?