Uva 1630 折叠串
2017-01-01 11:07
309 查看
题目链接:https://uva.onlinejudge.org/external/16/1630.pdf
题意:折叠串,给一个字符串,相同部分可以折叠,折叠可以嵌套。求最短长度的一种折叠方法。括号和数字的长度也要考虑进去。
刚看到这个题目,没有一点思路,还是大牛们厉害!
分析:一个串,可以转成两种形式,要么本身可以转成有重叠部分的串,要么分成两个部分,再转成有重叠部分的串。
本身是否是重叠串,利用kmp查,分成两个部分,遍历一遍所有情况,这样,dp顺序就出来了,最外层是每次查的长度,第二层就是,利用这个长度,从每一个点开始查起。状态描叙是d[i][j]从 i 到 j 的最短字符串。
题意:折叠串,给一个字符串,相同部分可以折叠,折叠可以嵌套。求最短长度的一种折叠方法。括号和数字的长度也要考虑进去。
刚看到这个题目,没有一点思路,还是大牛们厉害!
分析:一个串,可以转成两种形式,要么本身可以转成有重叠部分的串,要么分成两个部分,再转成有重叠部分的串。
本身是否是重叠串,利用kmp查,分成两个部分,遍历一遍所有情况,这样,dp顺序就出来了,最外层是每次查的长度,第二层就是,利用这个长度,从每一个点开始查起。状态描叙是d[i][j]从 i 到 j 的最短字符串。
#include <bits/stdc++.h> using namespace std; const int maxn = 100 + 10; string d[maxn][maxn]; char s[maxn],t[maxn]; int f[maxn]; string ToString(int x) { string ans = ""; while(x) { ans +=(char)('0'+(x%10)); x/=10; } reverse(ans.begin(),ans.end()); return ans; } 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)!=EOF) { int len = strlen(s); for(int i=0; i<len; i++) d[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; d[i][j] = ""; for(int k=i; k<=j; k++) { d[i][j] +=s[k]; t[k-i] = s[k]; } t[j-i+1] = 0; getFail(t); if(l%(l-f[l])==0) //自身是重复的 { int cycle = l - f[l]; string t = ""; t = ToString(l/cycle); t+='('; t+=d[i][i+cycle-1]; t+=')'; if(t.length()<d[i][j].length()) d[i][j] = t; } for(int k=i; k<j; k++) { if(d[i][k].length()+d[k+1][j].length()<d[i][j].length()) { d[i][j] = d[i][k] + d[k+1][j]; } } } } cout<<d[0][len-1]<<endl; } return 0; }
相关文章推荐
- ViewPager的问题
- 使用SSH模式远程登录服务器
- Github不记录Contributions的问题
- Uva 1629 切蛋糕
- 深入理解Java:注解(Annotation)自定义注解入门
- android 多个imageview缩放,拖动
- 数据挖掘中的支持度 置信度 期望置信度 提升度
- activity中的fragment里面的detroy()方法中清理SharedPreferences文件的问题
- 定义了Shape,但是在LinearLayout中却显示不出来为什么啊?
- 洛谷2105 k皇后
- MySQL 从 5.5 升级到 5.6,启动时报错 [ERROR] Plugin 'InnoDB' init function returned error
- 和2016年的自己握手言和
- TProfiler
- 两个浮点数比较明明相等为啥还是会进if条件啊
- 一个调用多层次json的简便工具类
- (十四)文件操作——stat命令与函数
- idea本地调试hadoop
- Project Euler Question 4
- 网络:TCP/IP协议与socket的关系(转载)
- LeetCode448. Find All Numbers Disappeared in an Array新年第一篇