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 ...
随机推荐
- 180727-时序数据库InfluxDB之备份和恢复策略
influxdb 备份与恢复 参考: influxdb backup and restore 环境: influxdb v1.6.0 使用influx自动的控制台进行 I. 备份 备份命令 influ ...
- tensorflow中tensor与数组之间的转换
# 主要是两个方法: # 1.数组转tensor:数组a, tensor_a=tf.convert_to_tensor(a) # 2.tensor转数组:tensor b, array_b=b.eva ...
- WebGL中使用window.requestAnimationFrame创建主循环
今天总结记录一下WebGL中主循环的创建和作用.我先说明什么是主循环,其实单纯的webgl不存在主循环这个概念,这个概念是由渲染引擎引入的,主循环就是利用一个死循环或无截止条件的递归达到定时刷新can ...
- 解决webstorm中测试dva项目run start命令需要不断重启问题
用dva-cli构建了项目之后在webstorm开发,用npm start跑本地服务,经常修改之后在浏览器刷新没反应,偶尔才会有刷新,需要重新跑一遍npm start才会更新,这是怎么回事呢? web ...
- tikv 安装
export HostIP="127.0.0.1" docker run -d -p 2379:2379 -p 2380:2380 --name pd pingcap/pd \ - ...
- HTML5+Bootstrap 学习笔记 4
HTML5 <map> <area> 标签 <map> 标签定义客户端的图像映射.图像映射是带有可点击区域的图像. <area> 标签定义图像映射内部的 ...
- 移动端rem用法总结
先介绍一下这个近年来突起的黑马 CSS3中新增的属性,从IE9开始兼容,手机端都兼容.参考的是<html>这个标签的font-size.rem中的r就是root根的意思.所以rem要比em ...
- Asphalting Roads(翻译!)
Description City X consists of n vertical and n horizontal infinite roads, forming n × n intersectio ...
- 《C》数据类型
- debian 安装kde
今天用最小安装安装了一台debian虚拟机,想要安装kde桌面,总是安装不上,使用语句 apt-get install kde apt-get install kde4 都试了,不行.最终查看debi ...