【原题链接】传送门

【题面大意】

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

【题解思路】

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. Jmeter跨线程组传递参数

    Jmeter的线程组之间是相互独立的,各个线程组互不影响,所以线程组A中输出的参数,是无法直接在线程组B中被调用的. 但有时候为了方便,可以把不同模块接口放在不同线程组,就涉及不同线程组传参问题,比如 ...

  2. 深度学习基础(五)ResNet_Deep Residual Learning for Image Recognition

    ResNet可以说是在过去几年中计算机视觉和深度学习领域最具开创性的工作.在其面世以后,目标检测.图像分割等任务中著名的网络模型纷纷借鉴其思想,进一步提升了各自的性能,比如yolo,Inception ...

  3. Spark入门到精通--(第七节)环境搭建(服务器搭建)

    Spark搭建集群比较繁琐,需要的内容比较多,这里主要从Centos.Hadoop.Hive.ZooKeeper.kafka的服务器环境搭建开始讲.其中Centos的搭建不具体说了,主要讲下集群的配置 ...

  4. Django中cookie和session使用

    cookie和session的简单使用 def cookie(request): """ 操作cookie """ resp = HttpR ...

  5. Eclipse 创建第一个 springboot 应用

    1.前言 一直想把笔记整理出来,分享一下 springboot 的搭建: 因为私下 idea 用的比较多,使用比较方便,但恰逢小伙伴问起 eclipse 怎么搭建的问题, 顾整理以记之. 2.spri ...

  6. nginx中的超时设置,请求超时、响应等待超时等

    nginx比较强大,可以针对单个域名请求做出单个连接超时的配置. 比如些动态解释和静态解释可以根据业务的需求配置 proxy_connect_timeout :后端服务器连接的超时时间_发起握手等候响 ...

  7. - configuration.module has an unknown property 'loader' 问题解决

    错误提示: Invalid configuration object. Webpack has been initialised using a configuration object that d ...

  8. LeetCode-7-反转数组-c#

    目前看到的网上的版本 都是用到数组的反转函数.对于代码实现的细节没给出 反转函数的想法没给出. 特在此补充. Reverse函数是从c#库源码中抠出的主要部分代码.主要是双端步进.交换,当然是o(1) ...

  9. tensorflow(3)可视化,日志,调试

    可视化 添加变量 tf.summary.histogram( "weights1", weights1) # 可视化观看变量 还有添加图像和音频. 常量 tf.summary.sc ...

  10. Unable to find a constructor to use for type System.Security.Claims.Claim. A class should either have a default constructor

    Newtonsoft.Json DeserializeObject 反序列化  IdentityServer4.Models Cliecnt 错误: Newtonsoft.Json.JsonSeria ...