【POJ 2176】Folding
【原题链接】传送门
【题面大意】
一个字符串,可以将它改写成循环节带括号的形式进行压缩,输出压缩长度最小的字符串。
【题解思路】
1.没思路没思路,不知道怎么乱搞,大概就可以想到动态规划。
2.套路区间dp,f[l][r]表示[l,r]区间内的最小表示(字符串)和长度。
3.考虑需要进行的两个操作:折叠和合并。
折叠:每次扫描区间来求循环节感觉不是很行。->枚举折叠后的循环节的长度
合并:枚举中心点,注意长度和字符串都要更新。
4.注意边界:枚举循环节时 ,如果超出r的范围,当前长度就可作为循环节的长度。
注意初值:因为要求最小值,初值设为无穷大。
5.学到的:几个函数的用法。如:
strcat(d,s); // d = d+s;
strcpy(a,b); // 将b字符串复制到a中
sprintf(f,"类型",d); // 将任意类型d的字符写入f中
【code】
#include<bits/stdc++.h>
using namespace std;
#define File ""
#define inf 1<<30
#define ll long long
#define ull unsigned long long
#define rep(k,i,j) for(int k = i;k <= j; ++k)
#define FOR(k,i,j) for(int k = i;k >= j; --k)
inline void file(){
freopen(File".in","r",stdin);
freopen(File".out","w",stdout);
}
inline int read(){
int x=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-''; ch=getchar();}
return x*f;
}
const int mxn = +;
char ch[mxn];
int n;
struct rec{int lth; char s[mxn];}f[mxn][mxn];
int main(){
// file();
scanf("%s",ch+);
n = strlen(ch+);
rep(i,,n) f[i][i].s[] = ch[i],f[i][i].lth = ;
rep(len,,n){
rep(l,,n-len+){
int r = l+len-;
f[l][r].lth = inf;
rep(i,,len>>){
if(len%i) continue;
int st = l,ed = l+i;
while(ch[st] == ch[ed] && ed<=r) st++,ed++;
if(ed > r){
sprintf(f[l][r].s,"%d",len/i),
strcat(f[l][r].s,"("),
strcat(f[l][r].s,f[l][l+i-].s),
strcat(f[l][r].s,")");
f[l][r].lth = strlen(f[l][r].s);
break;
}
}
rep(i,l,r-){
if(f[l][r].lth > f[l][i].lth + f[i+][r].lth){
f[l][r].lth = f[l][i].lth + f[i+][r].lth;
strcpy(f[l][r].s,f[l][i].s);
strcat(f[l][r].s,f[i+][r].s);
}
}
}
}
puts(f[][n].s);
return ;
}
/*
AAAAAAAAAABABABCCD
*/
【POJ 2176】Folding的更多相关文章
- bzoj 2295: 【POJ Challenge】我爱你啊
2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec Memory Limit: 128 MB Description ftiasch是个十分受女生欢迎的同学,所以 ...
- 【链表】BZOJ 2288: 【POJ Challenge】生日礼物
2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 382 Solved: 111[Submit][S ...
- BZOJ2288: 【POJ Challenge】生日礼物
2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 284 Solved: 82[Submit][St ...
- BZOJ2293: 【POJ Challenge】吉他英雄
2293: [POJ Challenge]吉他英雄 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 80 Solved: 59[Submit][Stat ...
- BZOJ2287: 【POJ Challenge】消失之物
2287: [POJ Challenge]消失之物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 254 Solved: 140[Submit][S ...
- BZOJ2295: 【POJ Challenge】我爱你啊
2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 126 Solved: 90[Submit][Sta ...
- BZOJ2296: 【POJ Challenge】随机种子
2296: [POJ Challenge]随机种子 Time Limit: 1 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 114 Solv ...
- BZOJ2292: 【POJ Challenge 】永远挑战
2292: [POJ Challenge ]永远挑战 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 513 Solved: 201[Submit][ ...
- 【POJ 1125】Stockbroker Grapevine
id=1125">[POJ 1125]Stockbroker Grapevine 最短路 只是这题数据非常水. . 主要想大牛们试试南阳OJ同题 链接例如以下: http://acm. ...
随机推荐
- dvi文件和将dvi文件转换成pdf格式
dvi文件和将dvi文件转换成pdf格式 Latex只能把tex文件编译成dvi文件, 在cmd 中: 使用xdvi查看dvi格式的文件 若用texstudio编辑tex文件,则可直接将已编译成功的. ...
- css阴影框
选中div浮动的阴影框.example-card:hover {box-shadow: 0 15px 30px rgba(0, 0, 0, 0.1);transform: translate3d(0, ...
- 10、jeecg 默认为空的字段值是如何被填充的?
1.前言 用过 jeecg 的小伙伴,在 jeecg 实体中常见下面几个字段: /**创建人名称*/ private java.lang.String createName; /**创建人登录名称*/ ...
- PHPExcel 读取 xls
<?php $xlsPath = './test.xls'; //指定要读取的exls路径 //$type = 'Excel2007'; //设置要解析的Excel类型 Excel5(2003或 ...
- 【jdbc访问数据库获取执行sql转换json】
Talk is cheap.Show me your code. import java.sql.*; import java.util.HashMap; import java.util.Map; ...
- 【Common】-NO.122.common.1 - pv、uv、ip,tps、qps、rps术语
Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...
- LeetCode 15 输入无序、有重复,输出排重版 3-Sum
V1 粗暴的遍历,时间复杂度O(N³) func threeSumClosest(nums []int, target int) int { min := 0 result := 0 for i := ...
- (转)cookie和session的区别
存放位置不同 cookie数据存放在客户的浏览器上,session数据放在服务器上. 安全程度不同cookie不是很安全,别人可以解析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用 ...
- linux----------yum一些安装命令汇总
1.yum install -y psmisc 安装killall命令 2.yum install -y lrzsz 安装sz(下载)和rz(上传)命令 3.yum ins ...
- 放弃antd table,基于React手写一个虚拟滚动的表格
缘起 标题有点夸张,并不是完全放弃antd-table,毕竟在react的生态圈里,对国人来说,比较好用的PC端组件库,也就antd了.即便经历了2018年圣诞彩蛋事件,antd的使用者也不仅不减,反 ...