博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
例题9-7 UVa11400 Partitioning by Palindromes(DP+回文串)
阅读量:6240 次
发布时间:2019-06-22

本文共 919 字,大约阅读时间需要 3 分钟。

题意:

看白书

要点:

回文串处理,传递边界,从左边界枚举到中心,如果出现不相等的说明不是回文串,否则为回文串。

DP:以d[i]存储第i个字符前划分成的回文串的个数的最小值,如果第i个字符和前面第j个字符之间的为回文串,那么d[i]=d[j-1]+1。因此状态转移方程就是d[i]=max(d[i],d[j-1]+1)。边界值d[0]=0,因为取最小值,一开始d数组赋值为一个比较大的数。

#include
#include
#include
#include
using namespace std;const int maxn = 1005;char str[maxn];int d[maxn];bool check(int left, int right)//回文串判断{ int mid = (left + right) / 2; for (int i = left; i <= mid; i++) if (str[i] != str[right + left - i]) return false; return true;}int main(){ int t,i,j; scanf("%d", &t); while (t--) { scanf("%s", str+1); int n = strlen(str+1); for (i = 1; i <= n; i++) d[i] = 3000; d[0] = 0; for (i = 1; i <= n; i++) for (j = 1; j <= i; j++) if (check(j, i)) d[i] = min(d[i], d[j - 1] + 1);//出现的最优解是与前面组成的回文串出现位置d+1的最小值 printf("%d\n", d[n]); } return 0;}

转载于:https://www.cnblogs.com/seasonal/p/10343739.html

你可能感兴趣的文章
linux 当路由器使用
查看>>
Exchange系列—配置传输规则
查看>>
1.3.1原文件声明规则
查看>>
Linux下搭建无人执守安装服务器
查看>>
第九节 三元操作符
查看>>
我的友情链接
查看>>
Win7新建Wifi热点(无工具版)
查看>>
IPPBX 2000 SIP 并发修改为一路
查看>>
修改Linux系统时间
查看>>
phalcon:使用路由和命名空间实现分组or模块化
查看>>
LVM Mirror Raid1管理
查看>>
last 命令:
查看>>
为linux安装epel-yum仓库
查看>>
自动登录TP-LINK路由器,获取所有信息,重启等等,实用方法
查看>>
ajax调用mvc控制器
查看>>
HTML特殊字符替换问题 html escape相关
查看>>
XCode打包出现does not contain a single boundle错误解决办法
查看>>
ifcfg, ip/ss,配置文件详解
查看>>
mac安装web3j
查看>>
扣丁音乐 个人练习源码下载
查看>>