UVA 11584 Partitioning by Palindromes (字符串区间dp)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2631
题目大意:
给一个字符串, 要求把它分割成若干个子串,使得每个子串都是回文串。问最少可以分割成多少个。
分析:
f[i]表示以i结尾的串最少可以分割的串数。
f[i] = min{ f[j]+1, 串[j,i]是回文串&&1<=j<=i }
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <vector> 6 #include <cstdlib> 7 #include <iomanip> 8 #include <cmath> 9 #include <ctime> 10 #include <map> 11 #include <set> 12 #include <queue> 13 using namespace std; 14 #define lowbit(x) (x&(-x)) 15 #define max(x,y) (x>y?x:y) 16 #define min(x,y) (x<y?x:y) 17 #define MAX 100000000000000000 18 #define MOD 1000000007 19 #define pi acos(-1.0) 20 #define ei exp(1) 21 #define PI 3.141592653589793238462 22 #define INF 0x3f3f3f3f3f 23 #define mem(a) (memset(a,0,sizeof(a))) 24 typedef long long ll; 25 ll gcd(ll a,ll b){ 26 return b?gcd(b,a%b):a; 27 } 28 bool cmp(int x,int y) 29 { 30 return x>y; 31 } 32 const int N=10005; 33 const int mod=1e9+7; 34 char str[N]; 35 int f[N]; 36 bool isPalind(int l, int r){ 37 while(l<r){ 38 if(str[l]!=str[r]) return false; 39 ++l; 40 --r; 41 } 42 return true; 43 } 44 int main(){ 45 int t; 46 scanf("%d",&t); 47 while(t--){ 48 scanf("%s",str+1); 49 int len=strlen(str+1); 50 mem(f); 51 for(int i=1;i<=len;i++){ 52 f[i]=i+1; 53 for(int j=1;j<=i;j++) 54 if(isPalind(j,i)) 55 f[i]=min(f[i],f[j-1]+1); 56 } 57 printf("%d\n",f[len]); 58 } 59 return 0; 60 }
转载于:https://www.cnblogs.com/shixinzei/p/7280710.html
UVA 11584 Partitioning by Palindromes (字符串区间dp)相关推荐
- UVA - 11584 Partitioning by Palindromes(划分成回文串)(dp)
题意:输入一个由小写字母组成的字符串,你的任务是把它划分成尽量少的回文串,字符串长度不超过1000. 分析: 1.dp[i]为字符0~i划分成的最小回文串的个数. 2.dp[j] = Min(dp[j ...
- uva 11584——Partitioning by Palindromes
题意:给定一个字符串,把该字符串划分为最少的回文串. 思路:dp,到达i点的回文串长度都存起来,那么dp[i]=min(以i为结尾的最短的回文串长度). code: #include <bits ...
- UVA 11584 Partitioning by Palindromes 动态规划 入门
这个题目的大意就是,给你一个字符串,然后让你求出最少的回文数.我开始傻逼了,写了一个o(n^3)的算法,结果老超时.然后略看了别人的题解,才知道有个如此的转移方程. f[i+1]=min(f[j]+1 ...
- UVA 11584—— Partitioning by Palindromes
题意:给定一个串,然后问最少可以分割成多少个回文串. 思路:简单dp,dp[i]=min(dp[j]+1,1<j<=i),两次循环扫一遍即可,考察dp的思想. code: #include ...
- UVA11584 划分成回文串 Partitioning by Palindromes(线性DP划分+DP判断回文串)
整理的算法模板合集: ACM模板 依旧是线性DP 我们使用闫氏DP分析法 总体DP转移的时间复杂度为O(n2)O(n^2)O(n2). 但是这里牵扯到判断 i\tt ii 到 j\tt jj 是否为回 ...
- 【CodeForces - 245H 】Queries for Number of Palindromes (带容斥的区间dp)
题干: You've got a string s = s1s2... s|s| of length |s|, consisting of lowercase English letters. The ...
- hdu 4632 子字符串统计的区间dp
题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. 简单的区间dp,哎,以为很神奇的东西,其实也是dp,只是参数改为区间,没做过此类型的题,想不到用dp,以后就 知道了,若已经知道[ ...
- lightoj 1044 - Palindrome Partitioning(需要优化的区间dp)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1044 题意:求给出的字符串最少能分成多少串回文串. 一般会想到用区间dp暴力3个for ...
- LA 4394 刷字符串(区间dp)
题意:给定两个长度相等,只有小写字母组成字符串A和B,每步可以把A的一个连续子串刷成同一个字母,问至少需要多少步才能把A变成B. 分析:区间DP,区间DP的套路就是 d[i][j]的在区间 (i,j) ...
最新文章
- 为什么你总办不到大额信用卡?
- 操作对象_有进取心的机器人学习对象操作的基本原理
- Python基本的数据结构-序列
- 使用这6个技巧来物理保护 MacBook
- Filter的敏感词汇过滤案例
- Oracle数据库索引原理分析
- 实施数据驱动的供应链管理能力问题
- windows下向GitHub上传代码
- python好学吗-非科班出身自学Python好学吗?
- DLL中无法定位程序输入点inflateReset2于动态链接库
- 520送男朋友什么礼物比较好、520给男朋友的实用性礼物
- 像素与照片尺寸、分辨率之间的关系
- ME51N 创建采购申请
- 相传国际象棋是古印度舍罕王的宰相达依尔发明的.舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐.这位聪明的宰相指着8*8共64格的象棋说:陛下,请您赏给我一些麦子吧.就在棋盘的第1格放1粒,第2格放2粒
- MongoDB_实战部分(二)
- IOS应用开发调研报告
- elf中的bss data
- 读计算机专业选北大还是清华,想要学“计算机专业”要选好学校,除了清华北大,这7所也很好...
- 定时自动关机命令超级大全
- window纯净系统下载地址
热门文章
- 通货膨胀时是否提前还本付息--郎咸平
- leetcode —— 面试题 16.19. 水域大小
- leetcode - 22. 括号生成
- 识别和追踪主题层次的影响力者(来自2018 Machine Learning 论文学习笔记)
- 高效的Java集合框架GNU Trove的使用
- 网络爬虫中URLConnection的使用[以科学网为例]
- python中pip的安装与使用
- windows下搭建基于nginx的rtmp服务器
- Ubuntu解决sudo source command not found错误
- Cppcheck 1 54 C/C++静态代码分析工具