题意:

给你一串数字,要求你对其进行折叠使其长度最短。
折叠情况:全是一个字母 & 重复的字符串

AAAAAAAAAABABABCCD    -->   9(A)3(AB)CCD
NEERCYESYESYESNEERCYESYESYES      -->       2(NEERC3(YES))

思路:

用dp[i][j]表示从 i 到 j 的最短情况。 不停的往下找,得到 i 到 j 的字符串后,再判断能否折叠
大致思路如此,中间WR了一把,在将长度转换成字符型时直接用的 t + ‘0’,WR后发现大于9就木有了- -,这智商
强行坑自己一波。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
const int maxn = 105;
int dp[maxn][maxn];
string ans[105][105];
string s; int judge(int l,int r) //判断折叠
{
int i,j;
bool flag =true;
for(i = 1; i <= (r-l+1)/2; i++)
{
if((r-l+1) % i) continue;
flag = true;
for(j = l; j+i <= r; j++)
{
if(s[j] != s[j+i])
{
flag = false;
break;
}
}
if(flag)
return i;
}
return false;
} int dfs(int l,int r)
{
if(dp[l][r] != -1)
return dp[l][r];
if(l == r)
{
dp[l][r] = 1;
ans[l][r] = s[l];
return 1;
} int tt = 0x3f3f3f3f;
int k;
for(int i = l; i < r; i++) //找出最短
{
int tmp = dfs(l,i) + dfs(i+1,r); //左右两段合并
if(tt > tmp)
{
k = i;
tt = tmp;
}
}
// cout << l <<" " << r << endl;
ans[l][r] = ans[l][k] + ans[k+1][r]; //得到临时最短NEERC3(YES)NEERC3(YES)
tt = dp[l][k] + dp[k+1][r]; int flag = judge(l,r); //再次判断能否折叠,例:NEERC3(YES)NEERC3(YES) -> 2(NEERC3(YES))
if(flag)
{
char orz[5];
int t = (r-l+1)/flag;
sprintf(orz,"%d",t);
string tans = string(orz)+"("+ans[l][l+flag-1]+")";
if(tans.size() < tt)
{
tt = tans.size();
ans[l][r] = tans;
}
}
// cout <<ans[l][r] <<" " << l << " " << r << endl;
return dp[l][r] = tt;
} int main()
{
while(cin >> s)
{
int len = s.size()-1;
memset(dp,-1,sizeof(dp));
dfs(0,len);
cout<<ans[0][len]<<endl;
}
return 0;
}

  

习题9-4 uva 1630的更多相关文章

  1. Uva 1630 折叠串

    题目链接:https://uva.onlinejudge.org/external/16/1630.pdf 题意:折叠串,给一个字符串,相同部分可以折叠,折叠可以嵌套.求最短长度的一种折叠方法.括号和 ...

  2. UVa 1630 Folding (区间DP)

    题意:折叠一个字符串,使得其成为一个尽量短的字符串  例如AAAAAA变成6(A) 而且这个折叠是可以嵌套的,例如 NEEEEERYESYESYESNEEEEERYESYESYES 会变成 2(N5( ...

  3. UVa 1630 串折叠

    https://vjudge.net/problem/UVA-1630 题意: 给出一个由大写字母组成的长度为n的串,折叠成一个尽量短的串.例如:AAAAAAAAABABABCCD折叠成9(A)3(A ...

  4. UVa 1630 区间DP Folding

    一个字符串如果能简写,要么是重复多次,按题中的要求简写:要么是左右两个部分分别简写后再拼起来. dp(i, j)表示字串(i, j)所能被简写的最短的字符串. 判断一个字符串是否为周期串以及求出它的周 ...

  5. Folding UVA - 1630

    题目 ans[i][j]表示由原串第i个字符到第j个字符组成的子串的最短折叠长度如果从i到j本身可以折叠,长度就是本身长度或折叠后的长度的最小值***此处参考:http://blog.csdn.net ...

  6. 【Uva 1630】Folding

    [Link]: [Description] 你能对字符串进行压缩的操作; 即把连续出现的相同的子串改成它出现的次数+这个最基本的字符串的形式; 问你这个字符串最短能被压缩得多短; [Solution] ...

  7. UVA - 1630 Folding(串折叠)(dp---记忆化搜索)

    题意:给出一个由大写字母组成的长度为n(1<=n<=100)的串,“折叠”成一个尽量短的串.折叠可以嵌套.多解时可输出任意解. 分析: 1.dp[l][r]为l~r区间可折叠成的最短串的长 ...

  8. ACM训练计划建议(写给本校acmer,欢迎围观和指正)

    ACM训练计划建议 From:freecode#  Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...

  9. ACM训练计划建议(转)

    ACM训练计划建议 From:freecode#  Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...

随机推荐

  1. DML数据操作语言之增加,删除,更新

    1.数据的增加 数据的增加要用到insert语句  ,基本格式是: insert into <表名> (列名1,列名2,列名3,......) values (值1,值2,值3,..... ...

  2. CentOS7安装配置iptables防火墙

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/50779761 CentOS7默认的防火墙不是iptables,而是firewall ...

  3. 我自己总结的C#开发命名规范整理了一份

    我自己总结的C#开发命名规范整理了一份 标签: 开发规范文档标准语言 2014-06-27 22:58 3165人阅读 评论(1) 收藏 举报  分类: C#(39)  版权声明:本文为博主原创文章, ...

  4. $.ajax 中的contentType

    $.ajax 中的contentType 在 cnodejs.org 论坛中有一个问题,让我也很奇怪,说是 $.ajax 设置数据类型 applicaiton/json之后,服务器端(express) ...

  5. 分布式版本控制系统Git的安装及使用

    Git的安装分为客户端安装和服务端安装,鉴于我平时码代码在windows环境下,因此本文客户端安装直接在windows环境,服务端安装在linux环境下(centos). Git客户端安装 客户端下载 ...

  6. 请求方式:request和 get、post、put

    angular 的 http 多了 Request, Headers, Response ,这些都是游览器的"新特性" Fetch API. Fetch API 和以前的 xmlh ...

  7. Spring Security 入门(3-11)Spring Security 的登录密码验证过程 UsernamePasswordAuthenticationFilter

    认证过程如下 一.先判断请求(请求必须是post请求)地址是否为配置的 login-processing-url 值(默认/j_spring_security_check),如果不是,则放行,进入下一 ...

  8. python网络爬虫与信息提取 学习笔记day1

    Day1: 安装python之后,为其配置requests第三方库,并爬取百度主页内容. 语句解释: r.status_code检测请求的状态码,如果状态码为200,则说明访问成功,否则,则说明访问失 ...

  9. python当中的 可迭代对象 迭代器

    学习python有一段时间了,在学习过程中遇到很多难理解的东西,做一下总结,希望能对其他朋友有一些帮助. 完全是个人理解,难免有错,欢迎其他大神朋友们批评指正. 1 迭代 什么是迭代呢??我们可以这样 ...

  10. 云计算 IaaS,SaaS,PaaS的区别?一个通俗易懂的吃货文章

    来自一篇吃货文章了: ———————————————————— &lt;img src="https://pic2.zhimg.com/a55676f8e1b084a398f8cd5 ...