【原题链接】传送门

【题面大意】

一个字符串,可以将它改写成循环节带括号的形式进行压缩,输出压缩长度最小的字符串。

【题解思路】

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的更多相关文章

  1. bzoj 2295: 【POJ Challenge】我爱你啊

    2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec  Memory Limit: 128 MB Description ftiasch是个十分受女生欢迎的同学,所以 ...

  2. 【链表】BZOJ 2288: 【POJ Challenge】生日礼物

    2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 382  Solved: 111[Submit][S ...

  3. BZOJ2288: 【POJ Challenge】生日礼物

    2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 284  Solved: 82[Submit][St ...

  4. BZOJ2293: 【POJ Challenge】吉他英雄

    2293: [POJ Challenge]吉他英雄 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 80  Solved: 59[Submit][Stat ...

  5. BZOJ2287: 【POJ Challenge】消失之物

    2287: [POJ Challenge]消失之物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 254  Solved: 140[Submit][S ...

  6. BZOJ2295: 【POJ Challenge】我爱你啊

    2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 126  Solved: 90[Submit][Sta ...

  7. BZOJ2296: 【POJ Challenge】随机种子

    2296: [POJ Challenge]随机种子 Time Limit: 1 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 114  Solv ...

  8. BZOJ2292: 【POJ Challenge 】永远挑战

    2292: [POJ Challenge ]永远挑战 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 513  Solved: 201[Submit][ ...

  9. 【POJ 1125】Stockbroker Grapevine

    id=1125">[POJ 1125]Stockbroker Grapevine 最短路 只是这题数据非常水. . 主要想大牛们试试南阳OJ同题 链接例如以下: http://acm. ...

随机推荐

  1. Toad for Oracle 创建表空间和用户

    表空间 1.找到Tablespace,右键,单击Create Tablespace 2.输入表空间名字,例如:test_tablespace3.单击"Date Files"选项卡, ...

  2. python转换图片格式

    在图片所在的路径下,打开命令窗口 bmeps -c picturename.png picturename.eps

  3. Spring Boot(三):AOP&日志操作&异常处理

    一.AOP:HttpAspect.java 二.操作日志 在HttpAspect.java中调用org.slf4j.Logger.org.slf4j.LoggerFactory 三.异常处理 1.定义 ...

  4. 学号 20175313 《实验三 敏捷开发与XP实践》实验报告

    目录 实验三 敏捷开发与XP实践 一.实验内容 二.实验步骤 四.心得体会 五.码云链接 六.参考资料 实验三 敏捷开发与XP实践 一.实验内容 (1)编码标准 在IDEA中使用工具(Code-> ...

  5. 405 Method Not Allowed error with PUT or DELETE Request on IIS Server

    昨天手贱去一台服务器上装了Webdav. 一开始以为这个报错是跨域问题, 最近一直遇到用自动的publish发布到FTP出问题也就没想到是Webdav的问题 而且这东西装了还不能删除 处理办法 IIS ...

  6. TCP 服务端接收数据解析工具类

    package com.ivchat.common.util; import java.io.BufferedReader;import java.io.IOException;import java ...

  7. 面向对象:MATLAB的自定义类 [MATLAB]

    https://www.cnblogs.com/gentle-min-601/p/9785812.html 面向对象:MATLAB的自定义类 [MATLAB]   这几天刚刚开始学习MATLAB的面向 ...

  8. 关于Ajax的认识和封装(小记)

    一,Ajax 的概念 1,Ajax 是一种在无需重新加载整个网页(即刷新网页)的情况下,能够更新部分网页的技术. 2,Ajax 的全称是Asynchronous Javascript And XML” ...

  9. Liunx系统升级自带的Python版本

    一.查看系统信息 [root@localhost ~]# cat /etc/redhat-release CentOS release 6.4 (Final) [root@localhost ~]# ...

  10. CentOS 7 Squid代理服务器正向代理-传统代理

    Squid是Linux系统中最常用的一款开源代理服务软件,主要提供缓存加速和应用层过滤控制的功能,可以很好的实现HTTP.FTP.DNS查询以及SSL等应用的缓存代理 传统代理:普通的代理服务,多见于 ...