题目传送门

 /*
题意:给一个字符串,连续相同的段落可以合并,gogogo->3(go),问最小表示的长度
区间DP:dp[i][j]表示[i,j]的区间最小表示长度,那么dp[i][j] = min (dp[j][k] + dp[k+1][i+j-1]),
digit (i / k) + dp[j][j+k-1] + 2)后者表示可以压缩成k长度连续相同的字符串
4.5  详细解释 */
/************************************************
* Author :Running_Time
* Created Time :2015-8-12 15:28:11
* File Name :UVA_1351.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int MAXN = 2e2 + ;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + ;
char str[MAXN];
int dp[MAXN][MAXN]; bool check(int l, int r, int k) {
int i = ;
while (i < k) {
for (int p=; l+p*k+i<=r; ++p) {
if (str[l+i] != str[l+p*k+i]) return false;
}
++i;
}
return true;
} int digit(int x) {
int ret = ;
while (x) {
ret++; x /= ;
}
return ret;
} int main(void) { //UVA 1351 String Compression
int T; scanf ("%d", &T);
while (T--) {
scanf ("%s", str + );
int len = strlen (str + );
for (int i=; i<=len; ++i) dp[i][i] = ;
for (int i=; i<=len; ++i) {
for (int j=; j+i-<=len; ++j) {
dp[j][j+i-] = INF;
int &x = dp[j][j+i-];
for (int k=j; k<i+j-; ++k) {
x = min (x, dp[j][k] + dp[k+][i+j-]);
}
for (int k=; k<=i/; ++k) {
if (i % k != ) continue;
if (check (j, i + j - , k)) {
x = min (x, digit (i / k) + dp[j][j+k-] + );
}
}
}
} printf ("%d\n", dp[][len]);
} return ;
}

最新文章

  1. 转:聊聊mavenCenter和JCenter
  2. 微信小程序开发工具的数据,配置,日志等目录在哪儿? 怎么找?
  3. Linux下安装与使用本地的perl模块
  4. 第七天 面向对象进阶与socket编程
  5. struts2 ModelDriven 和 Preparable 拦截器
  6. canvas绘图动画细节
  7. WebStorm shortcuts.
  8. OpenGL ES 2.0 向量
  9. 【C#学习笔记之一】C#中的关键字
  10. 使用C#+XPath+HtmlAgilityPack轻松搞一个资源下载器
  11. java的static与C#的static的异同
  12. linux下Tomcat进程shutdown不完全--解决方案
  13. Atlantis HDU - 1542 (扫描线,线段树)
  14. 编译Uboot——错误记录
  15. 5个Spark应用实例
  16. 细胞迁移 | cell migration
  17. 构造,析构 cpp
  18. UI设计:C4D作品案例分享
  19. Tomcat新问题 还没有解决:the apr based apache tomcat native librariy which allows optional perf...........
  20. JSON传输数组的基本操作

热门文章

  1. Codeforces 651D Image Preview【二分+枚举】
  2. UVA 437_The Tower of Babylon
  3. ios计算字符串宽高,指定字符串变色,获取URL参数集合
  4. 在 Oracle Linux 上使用 DTrace
  5. Sqlserver数据库发送邮件
  6. Django学习系列之Python+Xadmin
  7. javascript statically scope
  8. 004 ospf
  9. jQuery整理笔记七----几个经典表单应用
  10. swift编程语言基础教程 中文版