poj 2176 folding
Description:
就是把一个字符串压尽可能的压缩
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N = , INF = 1e9;
struct node{
char s[N]; //dp[i][j]的len表示区间i-j压缩后的最小长度 s表示压缩后的字串
int len;
}dp[N][N];
int n;
char s[N];
int main(){
scanf("%s", s + );
n = strlen(s + );
for(int i = ; i <= n; i++)
dp[i][i].len = , dp[i][i].s[] = s[i];
for(int l = ; l <= n; l++)
for(int i = ; i + l - <= n; i++){ //枚举区间
int j = i + l - ;
dp[i][j].len = INF;
for(int nowl = ; nowl <= l / ; nowl++){ //枚举一个区间所有可能被压缩后子串的长度
if(l % nowl != ) continue; //如果无法整除肯定不能被压缩
int st = i, ed = i + nowl;
while(s[st] == s[ed] && ed <= j) st++, ed++; //检验该串能否被压缩
if(ed > j){
int num = l / nowl; //压缩后串的数目为num
sprintf(dp[i][j].s, "%d", num); //那么该状态下最小串的开头就是num
strcat(dp[i][j].s, "(");
strcat(dp[i][j].s, dp[i][i + nowl - ].s); //把压缩后的串接起来
strcat(dp[i][j].s, ")");
dp[i][j].len = strlen(dp[i][j].s);
break;
}
}
for(int k = i; k < j; k++)
if(dp[i][j].len > dp[i][k].len + dp[k + ][j].len){ //重新扫一遍区间更新dp[i][j]
dp[i][j].len = dp[i][k].len + dp[k + ][j].len;
strcpy(dp[i][j].s, dp[i][k].s);
strcat(dp[i][j].s, dp[k + ][j].s);
}
}
puts(dp[][n].s);
return ;
}
poj 2176 folding的更多相关文章
- POJ 2176 Folding(区间DP)
题意:给你一个字符串,请把字符串压缩的尽量短,并且输出最短的方案. 例如:AAAAA可压缩为5(A), NEERCYESYESYESNEERCYESYESYES可压缩为2(NEERC3(YES)). ...
- 【POJ 2176】Folding
[原题链接]传送门 [题面大意] 一个字符串,可以将它改写成循环节带括号的形式进行压缩,输出压缩长度最小的字符串. [题解思路] 1.没思路没思路,不知道怎么乱搞,大概就可以想到动态规划. 2.套路区 ...
- $2019$ 暑期刷题记录1:(算法竞赛DP练习)
$ 2019 $ 暑期刷题记录: $ POJ~1952~~BUY~LOW, BUY~LOWER: $ (复杂度优化) 题目大意:统计可重序列中最长上升子序列的方案数. 题目很直接的说明了所求为 $ L ...
- poj动态规划列表
[1]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 13 ...
- POJ 动态规划题目列表
]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322 ...
- [转] POJ DP问题
列表一:经典题目题号:容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 13 ...
- POJ动态规划题目列表
列表一:经典题目题号:容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 13 ...
- DP题目列表/弟屁专题
声明: 1.这份列表不是我原创的,放到这里便于自己浏览和查找题目. ※最近更新:Poj斜率优化题目 1180,2018,3709 列表一:经典题目题号:容易: 1018, 1050, 1083, 10 ...
- poj 题目分类(1)
poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...
随机推荐
- html面试题总结
1.请描述一个网页从开始请求到最终显示的完整过程? 1).在浏览器中输入网址: 2).发送至DNS服务器并获得域名对应的WEB服务器的IP地址: 3).与WEB服务器简历TCP连接: 4).浏览器向W ...
- Mac下布置appium环境
1.下载或者更新Homebrew:homebrew官网 macOS 不可或缺的套件管理器 $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githu ...
- jpa的@Query中"?"占位符的使用小坑
今天使用@Query自定义查询语句,出现了一个错误: java.lang.IllegalArgumentException: Parameter with that position [1] did ...
- centos7.2 apache开启.htaccess
打开httpd.conf(在那里? APACHE目录的CONF目录里面),用文本编纂器打开后,查找 (1) AllowOverride None 改为 AllowOverride All (2)去掉下 ...
- win10 redis安装教程
下载解压,没什么好说的,在解压后的目录下有以下这些文件: 在 命令行 启动服务端 redis目录下执行: redis-server.exe redis.windows.conf 如果需要 开机启动:执 ...
- Mininet介绍及安装
什么是Mininet Mininet是由一些虚拟的终端节点(end-hosts).交换机.路由器连接而成的一个网络仿真器,它采用轻量级的虚拟化技术使得系统可以和真实网络相媲美. Mininet可以很方 ...
- HDU 5636 Shortest Path
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5636 题解: 1.暴力枚举: #include<cmath> #include<c ...
- C#的lock语句
文章:lock 语句(C# 参考) 代码: using System; using System.Threading.Tasks; public class Account { private rea ...
- redis 同步化操作
异步化操作是很麻烦的的.不好控.下面介绍个同步化的库bluebird.用法很简单.看下你还子就知道了 const redis = require('redis'); const bluebird = ...
- MySQL存储引擎InnoDB与Myisam
InnoDB与Myisam的六大区别 InnoDB与Myisam的六大区别 MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名字开始,扩展名 ...