Description:

  就是把一个字符串压尽可能的压缩

 #include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N = , INF = 1e9;
struct node{
char s[N]; //dp[i][j]的len表示区间i-j压缩后的最小长度 s表示压缩后的字串
int len;
}dp[N][N];
int n;
char s[N];
int main(){
scanf("%s", s + );
n = strlen(s + );
for(int i = ; i <= n; i++)
dp[i][i].len = , dp[i][i].s[] = s[i];
for(int l = ; l <= n; l++)
for(int i = ; i + l - <= n; i++){ //枚举区间
int j = i + l - ;
dp[i][j].len = INF;
for(int nowl = ; nowl <= l / ; nowl++){ //枚举一个区间所有可能被压缩后子串的长度
if(l % nowl != ) continue; //如果无法整除肯定不能被压缩
int st = i, ed = i + nowl;
while(s[st] == s[ed] && ed <= j) st++, ed++; //检验该串能否被压缩
if(ed > j){
int num = l / nowl; //压缩后串的数目为num
sprintf(dp[i][j].s, "%d", num); //那么该状态下最小串的开头就是num
strcat(dp[i][j].s, "(");
strcat(dp[i][j].s, dp[i][i + nowl - ].s); //把压缩后的串接起来
strcat(dp[i][j].s, ")");
dp[i][j].len = strlen(dp[i][j].s);
break;
}
}
for(int k = i; k < j; k++)
if(dp[i][j].len > dp[i][k].len + dp[k + ][j].len){ //重新扫一遍区间更新dp[i][j]
dp[i][j].len = dp[i][k].len + dp[k + ][j].len;
strcpy(dp[i][j].s, dp[i][k].s);
strcat(dp[i][j].s, dp[k + ][j].s);
}
}
puts(dp[][n].s);
return ;
}

最新文章

  1. x265,帧内预测代码分析
  2. Android 之 log
  3. 手机app测试之我见
  4. (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。
  5. linux 打补丁 2原理
  6. [LeetCode#274]H-Index
  7. LINQ to SQL 基础
  8. windows 编程 —— 子窗口 与 子窗口控件
  9. 【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo
  10. Centos6.5下通过shell脚本快速安装samba服务器
  11. Android自定义View前传-View的三大流程-Measure
  12. 16-1 ECMA5与ECMA6的函数定义
  13. Swift5 语言指南(十二) 属性
  14. c 字符数组与字符串
  15. English trip -- VC(情景课) 7 C How much are the shose? 鞋多少钱
  16. Django中模型(一)
  17. Struts按着配置文件的加载的顺序,后面文件和前面文件相同的配置,后面的会把前面的文件的值覆盖
  18. MSA(微服务简介)
  19. RabbitMQ消息分发轮询和Message Acknowledgment
  20. Elasticsearch学习(1) Spring boot整合Elasticsearch

热门文章

  1. Vue学习计划基础笔记(六) - 组件基础
  2. 8 个用于业余项目的优秀 Python 库
  3. JY播放器【蜻蜓FM电脑端,附带下载功能】
  4. PostgreSQL9.6主从配置
  5. Hyperledger_Fabric_Model
  6. Yii2 yii\helpers\ArrayHelper
  7. Kotlin 学习笔记(一)
  8. Scrum7
  9. POJ题目分类推荐 (很好很有层次感)
  10. lintcode-457-经典二分查找问题