UVA11584 Partitioning by Palindromes(动态规划)
本题vjudge链接
题意:给你一个字符串,让你求分割成最少回文串的数量,比如racecar最少就是1,fastcar就是7,aaadbccb就是3
思路:
- 说实话,不放到动态规划的专题我可能都不知道怎么做
- 提供一种比较好想的思路:记一个长度为lll的字符串最大的分割数量就是lll,如果说第lll个字符和第l−1l - 1l−1个字符拼成的字符串是回文串,则分割数量就可以减少,即将l−1l - 1l−1 ~ lll的字符串看成一个字符,固分割数减一,以此类推往前找能够看成单个字符的回文串来求出长度为lll的字符串的最小的分割数
- 设dp[i]为从0~i的字符串的最小分割数,当j + 1 ~ i是回文串时,其分割数就为dp[j] + 1,设isp[i][j]表示字符串下标从i~j是否为回文串,状态转移方程为
dp[i]=min{dp[j]+1},isp[j+1][i]=truedp[i] = min\{dp[j] + 1\},\ \ isp[j + 1][i] = true dp[i]=min{dp[j]+1}, isp[j+1][i]=true - 代码如下
#include <cstdio> #include <cstring> #include <algorithm>using namespace std;int dp[1005], len; bool isp[1005][1005]; char str[1005];void check() {len = strlen(&str[1]) + 1;for (int i = 1; i < len; i++) { isp[i][i] = true; }for (int i = 1; i + 1 < len; i++) { isp[i][i + 1] = (str[i] == str[i + 1]); }for (int i = 2; i < len; i++) {for (int j = 1; j + i < len; j++) {if (str[j] == str[j + i] && isp[j + 1][j + i - 1]) isp[j][j + i] = true;}} }void solve(){memset(isp, 0, sizeof isp);memset(dp, 0x3f, sizeof dp);scanf("%s", &str[1]);check();dp[0] = 0;for (int i = 1; i < len; i++) {for (int j = i; j > 0; j--) {if(!isp[j][i]) continue;dp[i] = min(dp[i], dp[j - 1] + 1);}}printf("%d\n", dp[len - 1]); }int main() { #ifndef ONLINE_JUDGEfreopen("D:/MYCODE/vsCode-c/test.in", "r", stdin);freopen("D:/MYCODE/vsCode-c/test.out", "w", stdout); #endifint T;scanf("%d", &T);while(T--) solve();return 0; }
原地址
UVA11584 Partitioning by Palindromes(动态规划)相关推荐
- UVA 11584 Partitioning by Palindromes 动态规划 入门
这个题目的大意就是,给你一个字符串,然后让你求出最少的回文数.我开始傻逼了,写了一个o(n^3)的算法,结果老超时.然后略看了别人的题解,才知道有个如此的转移方程. f[i+1]=min(f[j]+1 ...
- uva11584 Partitioning by Palindromes
题目大意: 给出一个字符串,把他划分成尽量少的回文串,问最少的回文串个数 /*先预处理所有回文子串dp[i]表示字符1~i划分成的最小回文串的个数 */ #include<iostream> ...
- UVA11584 划分成回文串 Partitioning by Palindromes(线性DP划分+DP判断回文串)
整理的算法模板合集: ACM模板 依旧是线性DP 我们使用闫氏DP分析法 总体DP转移的时间复杂度为O(n2)O(n^2)O(n2). 但是这里牵扯到判断 i\tt ii 到 j\tt jj 是否为回 ...
- UVA - 11584 Partitioning by Palindromes(划分成回文串)(dp)
题意:输入一个由小写字母组成的字符串,你的任务是把它划分成尽量少的回文串,字符串长度不超过1000. 分析: 1.dp[i]为字符0~i划分成的最小回文串的个数. 2.dp[j] = Min(dp[j ...
- UVA 11584—— Partitioning by Palindromes
题意:给定一个串,然后问最少可以分割成多少个回文串. 思路:简单dp,dp[i]=min(dp[j]+1,1<j<=i),两次循环扫一遍即可,考察dp的思想. code: #include ...
- uva 11584——Partitioning by Palindromes
题意:给定一个字符串,把该字符串划分为最少的回文串. 思路:dp,到达i点的回文串长度都存起来,那么dp[i]=min(以i为结尾的最短的回文串长度). code: #include <bits ...
- UVA 11584 Partitioning by Palindromes (字符串区间dp)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- c语言dp状态转移方程,[总结-动态规划]经典DP状态设定和转移方程
马上区域赛,发现DP太弱,赶紧复习补上. #普通DP CodeForces-546D Soldier and Number Game 筛法+动态规划 待补 UVALive-8078 Bracket S ...
- 《算法竞赛入门经典——训练指南》第一章相关内容
#<算法竞赛入门经典--训练指南>第一章相关内容 希望各位大牛能指导! 红色为已经做了的...黄色背景是还有不懂地方,希望在年前能刷完第一章啊.... 更新版.google上貌似又加了ex ...
- 紫书《算法竞赛入门经典》
紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...
最新文章
- poj2186(强连通分量)
- 吃透这套架构体系,三年成为架构师!
- java struts2 安全漏洞 devMode 简介
- oracle中判断空,Oracle中判断空游标的方法
- poj 2388 排序的水题
- [Java] 蓝桥杯ADV-158 算法提高 新建Microsoft Word文档
- 道一声java技术_java提高篇(二)-理解java的三大特性之继承 - Java 技术驿站-Java 技术驿站...
- html中如何通过微信加朋友,微商必看:微信添加好友的13种方法和技巧
- 论文记录-2018-A survey on image tampering and its detection in real-world photos
- 批处理 b站视频批量合并
- 【考研英语语法】一般现在时练习题
- 链路监控框架pinpoint
- vim 删除行首指定数量字符
- 戴口罩的这一年,AI产业如何“重启、重塑、重构”?
- Android 新建module时的ByteCode Level
- 英语作文计算机国际会议开幕词,有关英语会议开场致辞范文
- fedora下关掉那讨厌的beep beep beep
- 深圳市半导体行业协会会长周生明率队赴加速科技调研
- 加载图片出错时,加载其他图片
- 【Effective C++】item20: Prefer pass-by-reference-to-const to pass-by-value