UVAlive-3363 String Compression
来源:互联网 发布:单反吧口碑好的淘宝店 编辑:程序博客网 时间:2024/05/16 18:43
题目大意:
给你一个字符串,让你把它压缩,比如gogogo可以压缩成3(go),letsgogogoletsgogogo可以压缩成2(lets3(go)),然后问你压缩后的最短长度。
解题思路:
区间DP。
一开始我以为是个基础的DP。没想到在第二个样例过不去,才发现这不是个基础的DP,也不是...这应该算是基础的区间DP吧。
首先设dp[i][j]表示从i到j这个区间内的字符串能压缩的最短长度。
那么状态转移方程就是
dp[i][j] = min(dp[i][k] + dp[k+1][j], dp[i][i+a] + 2 + len(a));
q其中k是[i,j]区间内的任意整数点,a是将字符串i到j的子串缩成长度为a的字符串的长度。
代码:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 205;const int INF = 0x3f3f3f3f;char str[maxn];int dp[maxn][maxn];int check(int be, int en, int k) {if ((en - be + 1) % k) return 0;for (int i = be + k; i <= en; i += k)for (int j = 0; j < k; ++j)if (str[i + j] != str[be + j]) return 0;return (en - be + 1) / k;}int getNum(int x) {if (x >= 0 && x <= 9) return 1;else if (x >= 10 && x <= 99) return 2;else return 3;}int main() {int t;scanf("%d", &t);while (t--) {scanf(" %s", str);int tmp, len = strlen(str);for (int i = 0; i < len; ++i) dp[i][i] = 1;for (int i = 0; i < len; ++i) {for (int j = i - 1; j >= 0; --j) {dp[j][i] = INF;for (int k = j; k < i; ++k)dp[j][i] = min(dp[j][i], dp[j][k] + dp[k+1][i]);for (int k = 1; k <= (i - j + 1) / 2; ++k) {int tmp = check(j, i, k);if (tmp)dp[j][i] = min(dp[j][i], dp[j][j + k - 1] + 2 + getNum(tmp));}}}printf("%d\n", dp[0][len-1]);}return 0;}
0 0
- UVALive 3363 String Compression
- UVAlive-3363 String Compression
- UVA1351 UVALive 3363 String Compression
- UVALive - 3363 String Compression (区间DP)
- UVALive - 3363 String Compression 区间DP
- UVALive 3363 String Compression (区间DP,4级)
- LA 3363 String Compression
- LA 3363 String Compression(dp)
- Simple String Compression Functions
- String Compression LA4256
- UVA 1351 - String Compression
- Q1.5 String Compression
- 1.6 String Compression
- CC150 1.6 String Compression
- 443. String Compression
- leetcode 443. String Compression
- 443. String Compression
- uva1351 - String Compression 区间DP
- android绘图处理系列(一):bitmapShader和Xfermode
- python opencv 使用摄像头捕获视频并显示
- python opencv 读取视频文件并显示
- 排序算法(一)模板类
- DBFS POJ1198 Solitaire
- UVAlive-3363 String Compression
- django与jquery数据传递过程
- 如何理解socket.io官网上创建聊天室的demo
- c++中的find
- 彻底弄懂matrix和canvas
- Hbase介绍及应用
- eclipse添加 task tags 步骤 (即 todo)
- 外部排序基石——合并排序
- poj 2325 && uva 10527