hihocoder1320 压缩字符串

题意:输入一个字符串,字符串可以压缩,如AAAAAAA == 7(A),可以重复压缩,问最小能压缩到最小的字符串的长度

题解:一个字符串如果小于4就没有压缩的必要

每个字符串可以分解为两个字符串,子问题

每个字符串可以压缩,就是有循环节,可以用KMP来算,这里的n很小就直接暴力

注意记录一下状态

#include<bits/stdc++.h>
#define maxn 1010
using namespace std;
char s[maxn];
int dp[maxn][maxn];
int best(int l,int r){
    if(dp[l][r]!=-1) return dp[l][r];
    int len = r-l+1, temp, flag=0, ans;
    if(len <= 4) return dp[l][r] = len;
    int mi = len;
    for(int i=l;i<r;i++){
        ans = best(l, i)+best(i+1, r);
        mi = min(mi, ans);
    }
    for(int k=1;k<=len/2;k++){
        if(len%k == 0){
            for(int j=l;j<=l+k-1;j++){
                temp = s[j], flag = 1;
                for(int i=j+k;i<=r;i += k){
                    if(s[i] != temp){
                        flag = 0;
                        break;
                    }
                }
                if(flag == 0) break;
            }
            if(flag == 1){
                ans = 2+best(l, l+k-1);
                int t = len/k;
                if(t < 10) ans++;
                else if(t < 100) ans+=2;
                mi = min(ans, mi);
            }
        }
    }
    return dp[l][r] = mi;
}
int main(){
    int n, l;
    scanf("%d", &n);
    while(n--){
        memset(dp, -1 ,sizeof(dp));
        scanf("%s", s);
        l = strlen(s);
        printf("%d\n", best(0, l-1));
    }
    return 0;
}
时间: 2024-12-28 17:48:17

hihocoder1320 压缩字符串的相关文章

hihoCoder #1320 : 压缩字符串 区间dp

/** 题目:hihoCoder #1320 : 压缩字符串 链接:https://hihocoder.com/problemset/problem/1320 描述 小Hi希望压缩一个只包含大写字母'A'-'Z'的字符串.他使用的方法是:如果某个子串 S 连续出现了 X 次,就用'X(S)'来表示. 例如AAAAAAAAAABABABCCD可以用10(A)2(BA)B2(C)D表示. 此外,这种压缩方法是可以嵌套的,例如HIHOHIHOCODERHIHOHIHOCODER可以表示成2(2(HIH

图片转成二进制并且压缩字符串

今天工作需要写了一个把图片转成字符串,并且压缩的小功能,其中用到了多线程去转换字符串,感觉写的还是不错的,拿出来分享一下 1 /// <summary> 2 /// 创建多核任务 3 /// </summary> 4 /// <param name="bytimages"></param> 5 /// <param name="count">创建几个核</param> 6 public stri

华为上机练习题--压缩字符串

题目: 通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串. 压缩规则: 1.仅压缩连续重复出现的字符.比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc". 2.压缩字段的格式为"字符重复的次数+字符".例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz". 要求实现函数: void str

[LeetCode] Design Compressed String Iterator 设计压缩字符串的迭代器

Design and implement a data structure for a compressed string iterator. It should support the following operations: next and hasNext. The given compressed string will be in the form of each letter followed by a positive integer representing the numbe

华为 压缩字符串

通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串.压缩规则:1.仅压缩连续重复出现的字符.比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".2.压缩字段的格式为"字符重复的次数+字符".例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz". package 华为机试; import ja

C压缩字符串中的空格

使用纯C语言,去除一个字符串开头和结尾的空格,内部若有连续空格只保留一个. C Code 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960   #include <stdio.h> #include <stdlib.h> #include <string.h> void trimSpace(char

[CareerCup] 1.5 Compress String 压缩字符串

1.5 Implement a method to perform basic string compression using the counts of repeated characters. For example, the string aabcccccaaa would become a2blc5a3. If the "compressed" string would not become smaller than the original string, your met

hihocoder 1320 - 压缩字符串 - [hiho一下160周]

这道题目可以说是一道非常好非常一颗赛艇的DP题了. 需要注意的是,其中情形3),字符串必然能完全转化为 N(str)形式,如果有N(str1)M(str2)等等另外样式,应该首先使用拼接形式对其进行划分. 那么,我们首先考虑写一个用来压缩情形3)下的字符串的函数zip(): 1 char str[105]; 2 int bit(int n) 3 { 4 int cnt=0; 5 while(n>0) 6 { 7 n/=10; 8 cnt++; 9 } 10 return cnt; 11 } 12

将xml文件由格式化变为压缩字符串

标签:去除xml文件的空格 有些时候解析xml文件,要求读取的字符串必须是压缩后的xml文件,不能有多余的空格.考虑到在<>标签内包含空格和大于号的情况,写了以下的转换方式. 传入的是压缩前的xml字符串,生成的是压缩后的字符串 private String convertFromXml(String str) { boolean flag = true; boolean quotesFlag = true; StringBuffer ans = new StringBuffer(); Str