【2018寒假集训 Day2】【动态规划】回文字
回文字(palin)
问题描述:
如果一个单词从前和从后读都是一样的,则称为回文字。如果一个单词不是回文字,则可以把它拆分成若干个回文字。编程求一个给定的字母序列,最多要分割成几部分,使每一部分都回文字。
输入格式:
输入文件有且只有一行,包含一个字符串。字符串由小写英文字母组成(a-z),长度不超过100。
输出格式:
输出文件只一行,为最少的回文字个数。
输入
样例1:anaban
样例2:abaccbcb
样例3:anavolimilana
输出
样例1:2
样例2:3
样例3:5
【解题思路】
设f[i]表示以i为结束点的字符串的最小划分。
那么显然,f[i]可以是f[i-1]+1,即以i-1为结束点的字符串的最小划分加上字符串第i个单独作为一个回文串。
f[i]也可以是与前面的字符串相结合,只要是回文,那么就可以作为f[i]的值。
只要在这其中求出f[i]的最值即可。
【参考程序】
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string st,sr;
int len,f[200];
bool judge(int a,int b)//回文判断函数
{
sr="";
for (int i=a;i<=b;i++) sr=sr+st[i];
int srize=sr.size()-1;
for (int i=0;i<=srize;i++)
if (sr[i]!=sr[srize-i]) return false;
return true;
}
int main()
{
freopen("palin.in","r",stdin);
freopen("palin.out","w",stdout);
cin>>st;
st=' '+st;
len=st.size();
memset(f,127,sizeof(f));//初始化为无穷大
f[0]=0;
for (int i=1;i<len;i++)
{
f[i]=f[i-1]+1;//解题思路中说的第一种情况
for (int j=1;j<i;j++)
if (judge(j,i))
f[i]=min(f[i],f[j-1]+1);//与前面的字符串相结合
}
cout<<f[len-1];
return 0;
}
【2018寒假集训 Day2】【动态规划】回文字的更多相关文章
- 【2018寒假集训 Day2】【2019.5.11更新】【动态规划】花店橱窗布置(FLOWER)
花店橱窗布置(FLOWER) 提交文件名:flower 问题描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号, ...
- 【2018寒假集训 Day2】【动态规划】又上锁妖塔
又上锁妖塔 (tower.in/tower.out) [题目描述] 小D在X星买完了想要的东西,在飞往下一个目的地的途中,正无聊的他转头看了看身边的小A,发现小A正在玩<仙剑>,可是小A很 ...
- 【2018寒假集训 Day2】【动态规划】钱币兑换(exchange)(自己翻译的2333)
钱币兑换(exchange) 问题描述: Dave偶然获得了未来几天的美元(dollars)与马克(marks)之间的兑换率.例如Dave开始有100marks,请编写个程序帮助Dave找出最好的买卖 ...
- 【2018寒假集训 Day2】【动态规划】挖地雷
挖地雷(Mine) 在一个地图上有N 个地窖(N<=200),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径,并规定路径都是单向的,且从编号小的地窖通向编号大的地窖.某人可以从任一处 ...
- 【2018寒假集训 Day2】【动态规划】垃圾陷阱(挖坑等填,未完成)
垃圾陷阱 (well) 卡门--农夫约翰极其珍视的一条Holsteins奶牛--已经落了到"垃圾井"中."垃圾井"是农夫们扔垃圾的地方,它的深度为D (2 &l ...
- 【2018寒假集训 Day2】【动态规划】抢金块
抢金块 输入文件:gold.in 输出文件:gold.out 问题描述: 地面上有一些格子,每个格子上面都有金块,但不同格子上的金块有不同的价值,你一次可以跳S至T步 .如果S=2,T=4.你就可以跳 ...
- 【2018寒假集训 Day2】【动态规划】维修栅栏
维修栅栏 问题描述: 小z最近当上了农场主!不过,还没有来得及庆祝,一件棘手的问题就摆在了小z的面前.农场的栅栏,由于年久失修,出现了多处破损.栅栏是由n块木板组成的,每块木板可能已经损坏也可能没有损 ...
- 【集训Day4 动态规划】【2018寒假集训 Day4 更新】蛙人
蛙人 (ple) 蛙人使用特殊设备潜水.设备中有一个气瓶,分两格:一格装氧气,另一格装氮气.留在水中有时间的限制,在深水中需要大量的氧气与氮气.为完成任务,蛙人必须安排好气瓶.每个气瓶可以用它的重量和 ...
- 2022寒假集训day2
day1:学习seach和回溯,初步了解. day2:深度优化搜索 T1 洛谷P157:https://www.luogu.com.cn/problem/P1157 题目描述 排列与组合是常用的数学方 ...
随机推荐
- 设计模式(十五)Facade模式
Facade模式可以为相互关联在一起的错综复杂的类整理出高层接口,可以让系统对外只有一个简单的接口,而且还会考虑到系统内部各个类之间的责任关系和依赖关系,按照正常的顺序调用各个类. 还是先看一下示例程 ...
- 框架搭建与EF常用基类实现
前两篇简单谈了一些.Net Core的优势以及机构设计的一些思路,这一篇开始,我们将从零开始搭建架构,底层我们将采用EF来访问数据库,所以这篇我们将贴一下EF常用操作的基类. 简单介绍下一些类库将要实 ...
- QA:无重复字符的最长子串
无重复字符的最长字串 leetcode地址:https://leetcode-cn.com/problems/longest-substring-without-repeating-character ...
- [考试反思]1008csp-s模拟测试64:契机
暴力没打满...有点垃圾... 考得稍绝望,啥也不会啊??? T3的测试点分治还写挂了... 其实就是没有沉下心好好的思考,在三道题上来回切换结果一个成型思路都没有 T2既然已经想到那一步了居然没有继 ...
- Function题解
这个题最优策略一定是向左上走到某一列再往上一直走. n*q在线暴力可做,离线按y排序,单调栈维护凸壳. 具体来说:对于i<j若A[i]>A[j] 即j的斜率小而且纵截距小,一定比i优,并且 ...
- 一、EditPlus 的安装 - Java软件的安装
EditPlus:该软件的功能类似于windows的文本编辑器,可处理文本.HTML和程序语言的Windows编辑器. 1.安装包的下载:http://pan.baidu.com/s/1qW1akZq ...
- Java nio 空轮询bug到底是什么
编者注:Java nio 空轮询bug也就是Java nio在Linux系统下的epoll空轮询问题. epoll机制是Linux下一种高效的IO复用方式,相较于select和poll机制来说.其高效 ...
- 2、linux基础-面试题
自己写的答案 1.1GB 2.4 3.ubuntu.dbian.Fedora 4.系统.硬件.clock -w 5.文件 6.uname -a 7.centos是redhat的社区版,redhat是商 ...
- powerdesigner连接Mysql进行反向工程并生成word文档图文教程
1 软件版本 windows7 64位 powerdesigner 15.1 Mysql 5.1.56 mysql-connector-odbc-3.51.30-winx64 对于mysql-conn ...
- nyoj 813-对决 (i*j == k)
813-对决 内存限制:64MB 时间限制:1000ms 特判: No 通过数:11 提交数:23 难度:0 题目描述: Topcoder 招进来了 n 个新同学,Yougth计划把这个n个同学分成两 ...