uva 1630 KMP判断周期串 和 区间DP 压缩字符串
来源:互联网 发布:win7与linux双系统 编辑:程序博客网 时间:2024/06/16 02:43
#include<cstdio>#include<iostream>#include<cstring>#include<string>#include<algorithm>using namespace std;string dp[160][160];char s[160],t[160];int f[160];string ToString(int x){string res = "";while(x){res += (char)('0' + (x % 10));x /= 10;}reverse(res.begin(),res.end());return res;}void GetFail(char *s){int len = strlen(s);f[0] = f[1] = 0;for(int i = 1;i < len;i++){int j = f[i];while(j && s[i] != s[j]) j = f[j];f[i+1] = s[i] == s[j] ? j+1:0;}}int main(){while(scanf("%s",s) == 1){int len = strlen(s);for(int i = 0;i < len;i++)dp[i][i] = string("") + s[i];for(int l = 2;l <= len;l++){for(int i = 0;i + l - 1 < len;i++){int j = i + l - 1;dp[i][j]="";for(int k = i;k <= j;k++){dp[i][j] += s[k];t[k-i] = s[k];}t[j-i+1] = 0;GetFail(t);if(l % (l - f[l]) == 0){int n = l - f[l];string tt="";tt = ToString(l / n);tt += '(';tt += dp[i][i+n-1];tt += ')';if(tt.length() < dp[i][j].length()) dp[i][j] = tt;}for(int k = i;k < j;k++){if(dp[i][k].length() + dp[k+1][j].length() < dp[i][j].length()){dp[i][j] = dp[i][k] +dp[k+1][j];}}}}cout<<dp[0][len-1]<<endl;}}
阅读全文
0 0
- uva 1630 KMP判断周期串 和 区间DP 压缩字符串
- UVA-1630 Folding (KMP、区间dp)
- uva 1328 - Period (周期串的判断 kmp)
- UVA 字符串区间DP
- bzoj1068(区间dp,字符串压缩)
- 字符串周期 KMP求解
- uva 1351 String Compression(字符串区间dp)
- UVA 4394 - String painter(字符串区间DP)
- kmp求字符串最小周期
- KMP与周期字符串前缀
- [SCOI2007]压缩 区间dp
- 一道区间dp和一道字符串
- UVA 10003 区间DP
- uva 1362 区间DP
- UVA 10617 区间DP
- uva 662(区间dp)
- UVA -10688(区间dp)
- uva 1351 区间dp
- 新出了一些有趣的动物技术书
- android模块化开发之aar——本地文件引用
- 如何透彻分析Java开发人员
- 判断
- 壕!程序员摆25台iPhone X求婚 闺蜜1人1台
- uva 1630 KMP判断周期串 和 区间DP 压缩字符串
- Git常用操作,最常用的都在这了
- 判断
- android 网络连接的判断
- android 之MVP模板
- 石子合并
- 防止用户误操作Back键
- 2017-11-3 Linux盘格式化、挂载、手动增加swap空间
- css创建表格