【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 题目描述 排列与组合是常用的数学方 ...
随机推荐
- kmp算法,求重复字符串
public class Demo { public static void main(String[] args) { String s1 = "ADBCFHABESCACDABCDABC ...
- Mysql数据库(五)表记录的检索
一.基本查询语句 二.单表查询 1.查询所有字段 mysql> SELECT * FROM tb_bookinfo; +----------+-----------+--------+----- ...
- 配置IIS服务器提供APP文件下载
[IIS7.IIS7.5] 1)打开IIS服务管理器,左边点到计算机(也可设置特定网站) 2)右边功能项中找到MIME类型,双击打开3)右键“添加”4)扩展名中填写".apk",M ...
- SpringCloud之Eureka服务注册与发现(一)
一 Eureka的基本架构 Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper). Eureka 采用了 C-S 的设计架构 ...
- Blazor之ABC
.net core正式推出了Blazor, 正好在一个小项目里试用一下. 建立项目 因为基于WebAssemble的客户端Blazor还不是正式版, 为了避免不必要的麻烦,我试用服务端的Blazor. ...
- 键盘常见ascii码值
回车事件最常见,码值13 ESC键: VK_ESCAPE (27) 回车键: VK_RETURN (13) TAB键: VK_TAB (9) Caps Lock键: VK_CAPITAL (20) S ...
- Dubbo 全链路追踪日志的实现
微服务架构的项目,一次请求可能会调用多个微服务,这样就会产生多个微服务的请求日志,当我们想要查看整个请求链路的日志时,就会变得困难,所幸的是我们有一些集中日志收集工具,比如很热门的ELK,我们需要把这 ...
- docker已运行容器添加或修改端口映射
# 不推荐方法:将原来的容器提交成镜像,然后利用新的建立的镜像重新建立一个带有端口映射的容器# 推荐方法:## 查看id 就是 容器的 hash_of_the_container 数值 docker ...
- vue+element UI + axios封装文件上传及进度条组件
1.前言 之前在做项目的时候,需要实现一个文件上传组件并且需要有文件上传进度条,现将之前的实现过程简单记录一下,希望可以帮助到有需要的人. 项目用的是Vue框架,UI库使用的是element UI,前 ...
- 大数据之路week01--day02_2 集合方面的总结
(初稿 太晚了,明天再进行补充) 1.对象数组(掌握) (1)数组既可以存储基本数据类型,也可以存储引用类型.它存储引用类型的时候的数组就叫对象数组. (2)案例: 用数组存储5个学生对象,并遍历数组 ...