zoukankan      html  css  js  c++  java
  • 区间DP UVA 1351 String Compression

    题目传送门

     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 /************************************************ 7 * Author :Running_Time 8 * Created Time :2015-8-12 15:28:11 9 * File Name :UVA_1351.cpp 10 ************************************************/ 11 12 #include <cstdio> 13 #include <algorithm> 14 #include <iostream> 15 #include <sstream> 16 #include <cstring> 17 #include <cmath> 18 #include <string> 19 #include <vector> 20 #include <queue> 21 #include <deque> 22 #include <stack> 23 #include <list> 24 #include <map> 25 #include <set> 26 #include <bitset> 27 #include <cstdlib> 28 #include <ctime> 29 using namespace std; 30 31 #define lson l, mid, rt << 1 32 #define rson mid + 1, r, rt << 1 | 1 33 typedef long long ll; 34 const int MAXN = 2e2 + 10; 35 const int INF = 0x3f3f3f3f; 36 const int MOD = 1e9 + 7; 37 char str[MAXN]; 38 int dp[MAXN][MAXN]; 39 40 bool check(int l, int r, int k) { 41 int i = 0; 42 while (i < k) { 43 for (int p=1; l+p*k+i<=r; ++p) { 44 if (str[l+i] != str[l+p*k+i]) return false; 45 } 46 ++i; 47 } 48 return true; 49 } 50 51 int digit(int x) { 52 int ret = 0; 53 while (x) { 54 ret++; x /= 10; 55 } 56 return ret; 57 } 58 59 int main(void) { //UVA 1351 String Compression 60 int T; scanf ("%d", &T); 61 while (T--) { 62 scanf ("%s", str + 1); 63 int len = strlen (str + 1); 64 for (int i=1; i<=len; ++i) dp[i][i] = 1; 65 for (int i=2; i<=len; ++i) { 66 for (int j=1; j+i-1<=len; ++j) { 67 dp[j][j+i-1] = INF; 68 int &x = dp[j][j+i-1]; 69 for (int k=j; k<i+j-1; ++k) { 70 x = min (x, dp[j][k] + dp[k+1][i+j-1]); 71 } 72 for (int k=1; k<=i/2; ++k) { 73 if (i % k != 0) continue; 74 if (check (j, i + j - 1, k)) { 75 x = min (x, digit (i / k) + dp[j][j+k-1] + 2); 76 } 77 } 78 } 79 } 80 81 printf ("%d ", dp[1][len]); 82 } 83 84 return 0; 85 }
    编译人生,运行世界!
  • 相关阅读:
    python yaml文件数据按原有的数据顺序dump
    HTMLTestRunner
    os.path获取当前路径及父路径
    update 字符串拼接
    VSCode 快速生成.vue基本模板、发送http请求模板
    Vue取消eslint语法限制
    node-sass安装失败解决方法
    docker 创建mysql和redis
    阿里云镜像加速器地址
    .net core + xunit 集成测试
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4725280.html
Copyright © 2011-2022 走看看