1068: [SCOI2007]压缩

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 496  Solved: 315
[Submit][Status]

Description

给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息。压缩后的字符串除了小写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上一个M(如果当前位置左边没有M,则从串的开始算起)开始的解压结果(称为缓冲串)。 bcdcdcdcd可以压缩为bMcdRR,下面是解压缩的过程:

另一个例子是abcabcdabcabcdxyxyz可以被压缩为abcRdRMxyRz。

Input

输入仅一行,包含待压缩字符串,仅包含小写字母,长度为n。

Output

输出仅一行,即压缩后字符串的最短长度。

Sample Input

bcdcdcdcdxcdcdcdcd

Sample Output

12

HINT

在第一个例子中,解为aaaRa,在第二个例子中,解为bMcdRRxMcdRR。

【限制】

100%的数据满足:1<=n<=50 100%的数据满足:1<=n<=50

这道题注意转移顺序。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 55
#define INF 0x3f3f3f3f
inline void deal(int &x,int y)
{
if (x>y)x=y;
}
char str[MAXN];
int dp[MAXN][MAXN];//已经做完第i个,在第j个后有一个M,需要的字符个数(包括j处的M)
int main()
{
//freopen("input.txt","r",stdin);
scanf("%s",str+);
int n=strlen(str+);
int i,j,k;
int x,y;
memset(dp,INF,sizeof(dp));
dp[][]=;
bool flag=;
for (i=;i<=n;i++)
{
for (j=;j<=i;j++)
if (j<=i-)
{
deal(dp[i][j],dp[i-][j]+);
deal(dp[i][i],dp[i][j]+);
} for (j=i-;j>=;j-=)
{
x=j+,y=j++(i-j)/;
flag=true;
for (k=;k<(i-j)/;k++)
{
if (str[x+k]!=str[y+k])
{
flag=false;
break;
}
}
if (flag)
{
deal(dp[i][j],dp[y-][j]+);
deal(dp[i][i],dp[i][j]+);
}
}
}
int ans=INF;
for (i=;i<=n;i++)
{
ans=min(ans,dp[n][i]);
}
printf("%d\n",ans);
}

最新文章

  1. ASCII和16进制对照表
  2. 使用命令行工具运行Xcode 7 UI Tests
  3. 实现winform DataGridView控件判断滚动条是否滚动到当前已加载的数据行底部
  4. Linq to 泛型集合查询集合包括大写M和年龄小于等于18
  5. Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/Object
  6. windows 和 linux ssh互连
  7. 2016年11-29 mysql数据库
  8. Twenty Newsgroups Classification任务之二seq2sparse
  9. BZOJ 1901 Dynamic Rankings 树董事长
  10. java得到clientIP地址和MAC住址
  11. Win内存分配函数(GlobalAlloc/HeapAlloc/LocalAlloc/VirtualAlloc)
  12. Java 标准 I/O 介绍
  13. boston_housing-多分类问题
  14. Sublime Text 3(3207)安装
  15. PyCharm远程开发和调试
  16. Integer诡异特性
  17. EZ 2018 05 13 NOIP2018 模拟赛(十三)
  18. Yii2 session的使用方法(3)
  19. WebApi(2)
  20. Android中高亮变色显示文本中的关键字

热门文章

  1. eclipse下修改项目名导致tomcat内发布名不一致的解决方法 .
  2. ls -l命令详解
  3. C#扫盲之:静态成员、静态方法、静态类、实例成员及区别
  4. MySQL解压版安装配置详解
  5. (转)Asp.NetURL重写的一种方法
  6. .net开发---自定义页面打印区域
  7. ASC码 .
  8. WCF学习系列二_使用IIS发布WCF服务
  9. MFC Tips(一) 在程序内部 保存读取配置
  10. Ibatis中sqlmap参数map中还需要套list的情况如何写?