UVa - 12451 - Let's call SPaDe a SPaDe
先上题目:
Problem H: Let's call SPaDe a SPaDe
Passing time, walking the passage, as you pass the String Parsing Department(abbreviated SPaDe), you pause, amazed at them by parsing strings way past midnight. At the SPaDe , they are overwhelmed with the stringent requirements to compression recently introduced by the SPaDe's director, Dr. Spade. Any string longer than 4 characters must now be compressed as much as possible, Dr. Spade dictates! "If a string can be expressed shorter, so it must be!", he shouts.

He then yells that abababab can be expressed as just(ab)4 which is only 5 symbols, a whole saving of 3 symbols, and everyone in the Department breaks out in a song of celebration, chanting:
This is why I'm hot
This is why I'm hot
This is why
This is why
This is why I'm hot
This is why I'm hot
This is why I'm hot
This is why
This is why
This is why I'm hot
but of course given in its compressed form
(This is why I'm hot)2
(This is why)2
(This is why I'm hot)3
(This is why)3
I'm hot
Given a string S over the alphabet {a,b,c,d} as input, output the length of its most compressed version. The SPaDe has yet to discover nested compression as in ((a)2b)3 so use only one-level compression
Input Format
The first line contains an integer T (1 <= T <= 100), the number of test cases. For each test case there is a line with a string S (5 <= |S| <= 100).
Output Format
For each test case, print on a separate line the minimum length of S after the compression described above.
Sample Input
2
abcda
dabbaabbabadddddccccbbbbbbbbbbbb
Sample Output
5
23
The string from the second example can be compressed into d(abba)2ba(d)5cccc(b)12 .
题意:给出一个一个串,将其压缩,要求压缩的部分是其循环节,用一对括号括住并且在后面跟上循环次数的数字,不能嵌套压缩,问要所以后的字符串最短有多短(有可能不需要压缩)。
区间dp+KMP求循环节。
原始做法dp[i][j]表示第i~j位的字符压缩以后需要最少需要多少长度来保存。然后对于第i~第j位的字符串还需要求一次循环节。这样的时间复杂度是O(n^3)算上100组case的话勉强可以在1s跑完。其实这就是正解了。但是比赛的时候小伙伴觉得可能会TLE,所以优化了一下变成dp[i]=min{dp[k]+(k+1,i)},枚举k。中途WA了一次,原因是get_next写的和正常的有点不一样,所以快要被小伙伴暴打一顿了→_→。
上代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define MAX 102
#define INF (1<<30)
using namespace std; char s[MAX];
int Next[MAX];
int ne[MAX];
int dp[MAX]; void get_next(char* c,int len,int* next){
int k,i;
k=-;i=;
next[]=-;
while(i<=len){
if(k==- || c[i]==c[k]){
k++; i++; next[i]=k;
}else{
k=next[k];
}
}
} inline int getVal(int x){
int ans=;
while(x){
ans++;
x/=;
}
return ans;
} int main(){
//freopen("in_a.txt","r",stdin);
int t,l,m,e,u,v;
scanf("%d",&t);
while(t--){
scanf("%s",s);
int len=strlen(s);
get_next(s,len,Next);
for(int i=;i<len;i++){ dp[i]=i-+;
if((i+)%(i+-Next[i+])==){
m=(i+)/(i+-Next[i+]);
l=+(i+-Next[i+])+getVal(m);
}else l=INF;
dp[i]=min(l,dp[i]); for(int j=;j<i;j++){
get_next(s+j+,i-j,ne);
v=i-j;
if((i-j)%(i-j-ne[i-j])==){
e=(i-j)/(i-j-ne[i-j]);
u=+(i-j-ne[i-j])+getVal(e);
}else u=INF;
v=min(u,v);
dp[i]=min(dp[i],dp[j]+v);
}
}
printf("%d\n",dp[len-]);
}
return ;
}
/*12451*/
UVa - 12451 - Let's call SPaDe a SPaDe的更多相关文章
- 棋牌平台开发教程之扎金花大小比较算法在php中的实现
PHP中扎金花比大小如何实现 在棋牌游戏中,不管是现实的还是线上的,扎金花无疑是最热门棋牌游戏之一,鄙人从小就酷爱扎金花,机缘巧合后面从事了IT行业,话不多说,直接进去正题吧. 扎金花两副牌的比较规则 ...
- 品鉴同事发来的炸金花的PHP程序代码
今天同事发来了一个炸金花的PHP程序,这个代码实现了两个人通过各自的三张牌进行权重计算,得到分数进行比较得到谁的牌大,我觉得里面还有一些问题,代码如下: <?php /** 每张牌的分值为一个2 ...
- 详细解读Python中的__init__()方法
init()方法意义重大的原因有两个.第一个原因是在对象生命周期中初始化是最重要的一步:每个对象必须正确初始化后才能正常工作.第二个原因是init()参数值可以有多种形式. 因为有很多种方式为init ...
- Straight Master (贪心)
题目如下:A straight is a poker hand containing five cards of sequential rank, not necessarily to be the ...
- 轻奢当道业绩逆势增长 Kate Spade联手韩国衣恋开拓中国市场_商场报道_中国时尚品牌网
轻奢当道业绩逆势增长 Kate Spade联手韩国衣恋开拓中国市场_商场报道_中国时尚品牌网 轻奢当道业绩逆势增长 Kate Spade联手韩国衣恋开拓中国市场
- 安卓手机的后门控制工具SPADE
SPADE,一款安卓手机的后门控制工具,安全研究人员可以以此了解和研究安卓后门原理. 首先,我们从网站www.apk4fun.com下载apk文件,如ccleaner.然后,我们安装spade git ...
- 序列模式挖掘--SPADE算法
- Super Poker II UVA - 12298 FFT_生成函数
Code: #include<bits/stdc++.h> #define maxn 1000000 #define ll long long #define double long do ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
随机推荐
- [Swift通天遁地]一、超级工具-(7)创建一个图文并茂的笔记本程序
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 慕课网6-4 编程练习:jQuery选择器中的过滤器
6-4 编程练习 结合所学的jQuery过滤器知识,实现如下图所示的隔行换色效果 任务 使用jQuery的.css()方法设置样式,语法css('属性 '属性值') 使用:odd和:even过滤器实现 ...
- [C陷阱和缺陷] 第2章 语法“陷阱”
第2章 语法陷阱 2.1 理解函数声明 当计算机启动时,硬件将调用首地址为0位置的子例程,为了模拟开机时的情形,必须设计出一个C语言,以显示调用该子例程,经过一段时间的思考,得出语句如下: ( * ...
- 题解报告:hdu 3501 Calculation 2 (欧拉函数的扩展)
Description Given a positive integer N, your task is to calculate the sum of the positive integers l ...
- ACM_发工资(简单贪心)
发工资咯: Time Limit: 2000/1000ms (Java/Others) Problem Description: 作为广财大的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日 ...
- Python之绘图和可视化
Python之绘图和可视化 1. 启用matplotlib 最常用的Pylab模式的IPython(IPython --pylab) 2. matplotlib的图像都位于Figure对象中. 可以使 ...
- SQL函数-汉字首字母查询
汉字首字母查询处理用户定义函数 CREATE FUNCTION f_GetPY1(@str nvarchar(4000))RETURNS nvarchar(4000)ASBEGIN DECLARE @ ...
- weex开发前配置
weex 环境配置:win10 node java git weex-toolkit :npm install weex-toolkit -g在安装weex-toolkit的时候,尽量不要使用cnpm ...
- jq微信分享
(function() { var weChat = { init: function() { this.getData(); }, getData: function() { $.ajax({ ty ...
- 3星|《OKR:源于英特热和谷歌的目标管理利器》:OKR原理、实施手册、实施过的公司的访谈
OKR原理与实施手册,另外附了几家实施过OKR的公司的访谈. 书中表述的OKR思想,我认为是这两点: 1:始终聚焦在最重要的目标上: 2:不以OKR为考核员工的指标: Kindle电子版排版有小缺陷, ...