【noi 2.6_8471】切割回文(DP)
2024-10-20 13:51:48
题意:给一个字符串,问至少切割几次使每子串都是回文的。
解法:f[i]表示前i个字符至少需要切割几次,预处理p[i][j]表示子串s[i]~s[j]是否为回文串。O(n^2)
另外,这题也类似“山区建小学”,可以枚举每个回文串的中心。但稍微麻烦一点。
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 using namespace std;
6
7 #define N 1010
8 char s[N];
9 int p[N][N],f[N];
10
11 int mmin(int x,int y) {return x<y?x:y;}
12
13 int main()
14 {
15 int T,l;
16 scanf("%d",&T);
17 while (T--)
18 {
19 scanf("%s",s+1);
20 l=strlen(s+1);
21 memset(p,0,sizeof(p));
22 for (int i=1;i<=l;i++)
23 {
24 int x=0;
25 while (i-x>0&&i+x<=l&&s[i-x]==s[i+x]) p[i-x][i+x]=1,x++;
26 x=1;
27 while (i-x>0&&i+x-1<=l&&s[i-x]==s[i+x-1]) p[i-x][i+x-1]=1,x++;
28 }
29 f[0]=-1;
30 for (int i=1;i<=l;i++)
31 {
32 f[i]=i-1;
33 for (int j=0;j<i;j++)
34 if (p[j+1][i]) f[i]=mmin(f[i],f[j]+1);
35 }
36 printf("%d\n",f[l]);
37 }
38 return 0;
39 }
最新文章
- 使用Swift打造动态库SDK和DemoAPP时所遇到的(Xcode7.3)
- 浅谈Java中的引用
- animate动画jquery
- linux访问windows共享文件夹的方法
- nginx 环境搭建(基于linux)
- Linux中yum和apt-get用法及区别
- struts2.3.15.1 中jsp:include与jsp:forward的用法
- css中文字体unicode对照表
- 【PythonChallenge】Level 4
- applicationDefaultJvmArgs:
- delphi if 语句循环语句
- go:挂webserver
- UVA 10277 Boastin&#39; Red Socks
- Java Thread wait、notify与notifyAll
- 简述在ADO中使用接口的抽象数据提供程序以及ADO.NET数据提供程序工厂模型
- 键盘快捷键大全 - Mac 技巧
- MongoDB --- 01. 安装, 第三方客户端
- ELk(Elasticsearch, Logstash, Kibana)的安装配置
- dtruss
- bzoj3209 花神的数论题——数位dp