题目链接 https://cn.vjudge.net/problem/UVA-11584

【题意】
输入一个由小写字母组成的字符串,你的任务是把它们划分成尽量少的回文串。比aaadbccb至少要划分成3个回文串,aaa,d,bccb 字符串长度不超过1000

【思路】
设dp(i)表示字符串s[0]到s[i]的子串可以划分成回文串的最少个数,那么状态转移方程为dp(i)=min{dp(j)+1 | s[j+1]~s[i]是回文串} 在递推求解之前需要先预处理出原字符串s[i]~s[j]是否为回文串,可以枚举每个字符和每两个字符为中点,然后向两边延伸,复杂度是O(n^2),之后递推的过程复杂度也是O(n^2),总的时间复杂度也就为O(n^2)

#include<bits/stdc++.h>
using namespace std;const int inf=2e9;
const int maxn=1050;int len;
char s[maxn];
int dp[maxn];
bool ok[maxn][maxn];void judge(){memset(ok,0,sizeof(ok));for(int i=0;i<len;++i){//枚举每个s[i]作为中心的子串是否是回文串 ok[i][i]=true;for(int j=1;;++j){int p=i-j;int q=i+j;if(p<0||q>=len) break;if(s[p]==s[q]) ok[p][q]=true;else break;}}for(int i=0;i<len-1;++i){//枚举每个s[i]和s[i+1]作为中心的子串是否是回文串 if(s[i]!=s[i+1]) continue;ok[i][i+1]=true;for(int j=1;;++j){int p=i-j;int q=i+1+j;if(p<0||q>=len) break;if(s[p]==s[q]) ok[p][q]=true;else break;}}
}int main(){int t;scanf("%d",&t);while(t--){scanf("%s",s);len=strlen(s);judge();dp[0]=1;for(int i=1;i<len;++i){if(ok[0][i]) {dp[i]=1;continue;}int ans=inf;for(int j=0;j<i;++j){if(ok[j+1][i]) ans=min(ans,dp[j]+1);}dp[i]=ans;}printf("%d\n",dp[len-1]);}return 0;
}

Uva 11584 - Partitioning by Palindromes(预处理+DP)相关推荐

  1. UVA - 11584 Partitioning by Palindromes(划分成回文串)(dp)

    题意:输入一个由小写字母组成的字符串,你的任务是把它划分成尽量少的回文串,字符串长度不超过1000. 分析: 1.dp[i]为字符0~i划分成的最小回文串的个数. 2.dp[j] = Min(dp[j ...

  2. UVA 11584 Partitioning by Palindromes (字符串区间dp)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  3. UVA 11584—— Partitioning by Palindromes

    题意:给定一个串,然后问最少可以分割成多少个回文串. 思路:简单dp,dp[i]=min(dp[j]+1,1<j<=i),两次循环扫一遍即可,考察dp的思想. code: #include ...

  4. uva 11584——Partitioning by Palindromes

    题意:给定一个字符串,把该字符串划分为最少的回文串. 思路:dp,到达i点的回文串长度都存起来,那么dp[i]=min(以i为结尾的最短的回文串长度). code: #include <bits ...

  5. UVA 11584 Partitioning by Palindromes 动态规划 入门

    这个题目的大意就是,给你一个字符串,然后让你求出最少的回文数.我开始傻逼了,写了一个o(n^3)的算法,结果老超时.然后略看了别人的题解,才知道有个如此的转移方程. f[i+1]=min(f[j]+1 ...

  6. UVa在线比赛单题汇总-----DP专题

    动态规划基础 例题 LA 3882 UVa 3882 - And Then There Was One 递推------------无力orz UVa 10635 10635 - Prince and ...

  7. UVA11584 划分成回文串 Partitioning by Palindromes(线性DP划分+DP判断回文串)

    整理的算法模板合集: ACM模板 依旧是线性DP 我们使用闫氏DP分析法 总体DP转移的时间复杂度为O(n2)O(n^2)O(n2). 但是这里牵扯到判断 i\tt ii 到 j\tt jj 是否为回 ...

  8. uva 11584 - 字符串 dp

    题目链接 一个长度1000的字符串最少划分为几个回文字符串 ---------------------------------------------------------------------- ...

  9. 回文串 --- 动态dp UVA 11584

    题目链接: https://cn.vjudge.net/problem/34398/origin 本题的大意其实很简单,就是找回文串,大致的思路如下: 1. 确定一个回文串,这里用到了自定义的chec ...

  10. uva live 4394 String painter 间隔dp

    // uva live 4394 String painter // // 问题是,在培训指导dp运动主题,乍一看,我以为只是一点点复杂 // A A磕磕磕,两个半小时后,.发现超过例子.然而,鉴于他 ...

最新文章

  1. BZOJ-1406-密码箱-AHOI2007-数学
  2. 3层b+树索引访问磁盘次数_【112期】面试官:为什么选择B+树作为数据库索引结构?谈谈你的理解
  3. java配置运行环境和配置
  4. 怎么做手机的上下滑动_diy滴胶手机壳到底怎么做呢?
  5. 算法积累之处理数组数据
  6. Mapper XML Files详解
  7. 实现查看订单详情功能
  8. Android-JNI开发系列《十一》实践-利用Android C源码实现GIF图片的播放
  9. day4_监控日志的脚本
  10. 激活函数、损失函数及其优化方法总结
  11. mysql连接服务器教程_连接 MySQL 服务器
  12. 大学一年级计算机科学与技术教材,计算机科学与技术系授课计划及课程表一年级.PDF...
  13. Java操作excel锁定
  14. QA_java BufferedReader.readLine_出现第一个字符无法读取的问题
  15. 2022五一劳动节虾皮仓库物流放假安排
  16. Z820安装Win7系统出现0X0000007B蓝屏报错无限重启的解决方法与相关问题
  17. 自定义滚动条、tbody加滚动条
  18. 如果可能,与孤独为友!
  19. python在冒号处显示语法错误_python冒号错误语法无效
  20. KPI、KPA、OKR

热门文章

  1. FAST迅捷路由器设置
  2. 记录:2018年CCF优秀博士学位论文奖信息
  3. 采访:新浪微博架构师兼首席PHP技术顾问惠新宸谈PHP的架构与发展
  4. Vue+element图片上传
  5. 工厂模式——烘烤OO披萨
  6. Jenkins的windows10 从节点经常性掉线问题解决
  7. 前端实现图片压缩—压缩图片大小,画质(两种方式)
  8. 这个世界的本源不是物质,而是物质背后的基本秩序-柏拉图
  9. python3爬取拉钩招聘数据
  10. Android安全攻防战,反编译与混淆技术完全解析(上)