题目传送门

  1. /*
  2. 题意:给一个字符串,连续相同的段落可以合并,gogogo->3(go),问最小表示的长度
  3. 区间DP:dp[i][j]表示[i,j]的区间最小表示长度,那么dp[i][j] = min (dp[j][k] + dp[k+1][i+j-1]),
  4. digit (i / k) + dp[j][j+k-1] + 2)后者表示可以压缩成k长度连续相同的字符串
    4.5  详细解释 */
  5. /************************************************
  6. * Author :Running_Time
  7. * Created Time :2015-8-12 15:28:11
  8. * File Name :UVA_1351.cpp
  9. ************************************************/
  10. #include <cstdio>
  11. #include <algorithm>
  12. #include <iostream>
  13. #include <sstream>
  14. #include <cstring>
  15. #include <cmath>
  16. #include <string>
  17. #include <vector>
  18. #include <queue>
  19. #include <deque>
  20. #include <stack>
  21. #include <list>
  22. #include <map>
  23. #include <set>
  24. #include <bitset>
  25. #include <cstdlib>
  26. #include <ctime>
  27. using namespace std;
  28. #define lson l, mid, rt << 1
  29. #define rson mid + 1, r, rt << 1 | 1
  30. typedef long long ll;
  31. const int MAXN = 2e2 + ;
  32. const int INF = 0x3f3f3f3f;
  33. const int MOD = 1e9 + ;
  34. char str[MAXN];
  35. int dp[MAXN][MAXN];
  36. bool check(int l, int r, int k) {
  37. int i = ;
  38. while (i < k) {
  39. for (int p=; l+p*k+i<=r; ++p) {
  40. if (str[l+i] != str[l+p*k+i]) return false;
  41. }
  42. ++i;
  43. }
  44. return true;
  45. }
  46. int digit(int x) {
  47. int ret = ;
  48. while (x) {
  49. ret++; x /= ;
  50. }
  51. return ret;
  52. }
  53. int main(void) { //UVA 1351 String Compression
  54. int T; scanf ("%d", &T);
  55. while (T--) {
  56. scanf ("%s", str + );
  57. int len = strlen (str + );
  58. for (int i=; i<=len; ++i) dp[i][i] = ;
  59. for (int i=; i<=len; ++i) {
  60. for (int j=; j+i-<=len; ++j) {
  61. dp[j][j+i-] = INF;
  62. int &x = dp[j][j+i-];
  63. for (int k=j; k<i+j-; ++k) {
  64. x = min (x, dp[j][k] + dp[k+][i+j-]);
  65. }
  66. for (int k=; k<=i/; ++k) {
  67. if (i % k != ) continue;
  68. if (check (j, i + j - , k)) {
  69. x = min (x, digit (i / k) + dp[j][j+k-] + );
  70. }
  71. }
  72. }
  73. }
  74. printf ("%d\n", dp[][len]);
  75. }
  76. return ;
  77. }

区间DP UVA 1351 String Compression的更多相关文章

  1. 区间DP UVA 10739 String to Palindrome

    题目传送门 /* 题意:三种操作,插入,删除,替换,问最少操作数使得字符串变成回文串 区间DP:有一道类似的题,有点不同的是可以替换,那么两端点不同的时候可以替换掉一个后成回文, 即dp[j+1][k ...

  2. UVA 1351 - String Compression

    题意: 对于一个字符串中的重复部分可以进行缩写,例如"gogogo"可以写成"3(go)",从6个字符变成5个字符.."nowletsgogogole ...

  3. 区间DP UVA 10453 Make Palindrome

    题目传送门 /* 题意:问最少插入多少个字符使得字符串变成回文串 区间DP:dp[i][j]表示[l, r]的字符串要成为回文需要插入几个字符串,那么dp[l][r] = dp[l+1][r-1]; ...

  4. 区间DP UVA 11584 Partitioning by Palindromes

    题目传送门 /* 题意:给一个字符串,划分成尽量少的回文串 区间DP:状态转移方程:dp[i] = min (dp[i], dp[j-1] + 1); dp[i] 表示前i个字符划分的最少回文串, 如 ...

  5. 区间DP与贪心算法的联系(uav Cutting Sticks &amp;&amp; poj Fence Repair(堆的手工实现))

    由于,这两题有着似乎一样的解法所以将其放在一起总结比較,以达到更好的区分二者的差别所在. 一.区间DP uva的Cutting Sticks是一道典型的模板题. 题目描写叙述: 有一根长度为l的木棍, ...

  6. UVA 1351 十三 String Compression

    String Compression Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit ...

  7. UVA Live Archive 4394 String painter(区间dp)

    区间dp,两个str一起考虑很难转移. 看了别人题解以后才知道是做两次dp. dp1.str1最坏情况下和str2完全不相同,相当于从空白串开始刷. 对于一个区间,有两种刷法,一起刷,或者分开来刷. ...

  8. BZOJ 1260&UVa 4394 区间DP

    题意: 给一段字符串成段染色,问染成目标串最少次数. SOL: 区间DP... DP[i][j]表示从i染到j最小代价 转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k ...

  9. codeforces 825F F. String Compression dp+kmp找字符串的最小循环节

    /** 题目:F. String Compression 链接:http://codeforces.com/problemset/problem/825/F 题意:压缩字符串后求最小长度. 思路: d ...

随机推荐

  1. 51nod 1298 圆与三角形 (计算几何)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1298 求出圆心到三条线段的最短距离,然后判断是否有顶点在圆外,就把全部情 ...

  2. [bzoj3712][PA2014]Fiolki_倍增LCA

    Fiolki bzoj-3712 PA-2014 题目大意:题目链接. 注释:略. 想法: 神题! 我们建树:对于一次倾倒操作,我们弄一个新的大瓶子作为两个合并瓶子的父亲节点,与两个瓶子相连. 对于一 ...

  3. guava cache学习

    Guava Cache与ConcurrentMap很相似,但也不完全一样.最基本的区别是ConcurrentMap会一直保存所有添加的元素,直到显式地移除.相对地,Guava Cache为了限制内存占 ...

  4. dubbo安装和使用

    转载:http://blog.csdn.net/zjcjava/article/details/78766095 背景 Dubbo的开源人梁飞在内部的交流会上宣布重启dubbo的维护和更新,具体PPT ...

  5. SAP ABAP 的经常使用debug方式

    SAP ABAP 的经常使用debug方式: 1. 直接在程序中设断点 在se38里面打上breakpoint,程序执行到该处即进入debug模式 2.background Job的debug 进入S ...

  6. EC2的维护更新-总结篇及有效经验分享

    2014年10月11日 号,我们对不到10%的EC2实例的完毕了重新启动.来预防不论什么与Xen安全通报(XSA-108)相关的安全风险. 日之前都有义务遵守相关问题的保密要求.直到它被向公众公布. ...

  7. 深度学习-theano-windows -cuda-环境搭建

    本文将具体介绍深度学习之cuda的环境搭建 工具:支持CUDA的显卡(安装cuda6.5),VS2013.Anaconda. 步骤: 1.安装cuda6.5 这个不具体介绍,网上有很多文章.注意选择你 ...

  8. ASP.NET MVC不可或缺的部分——DI(IOC)容器及控制器重构的剖析

    ASP.NET MVC不可或缺的部分——DI(IOC)容器及控制器重构的剖析   IoC框架最本质的东西:反射或者EMIT来实例化对象.然后我们可以加上缓存,或者一些策略来控制对象的生命周期,比如是否 ...

  9. 基本数据类型操作的补充和set的基本操作

    1,补充基本数据类型的知识点:    "  " .join(内容)...........什么加到什么里边,内容可以是:int,str,dic,tup. lst = ["周 ...

  10. GraphDatabase_action

    https://neo4j.com/docs/ #https://pypi.python.org/pypi/neo4j-driver/1.5.3from neo4j.v1 import GraphDa ...