题目链接:

https://cn.vjudge.net/contest/313499#problem/L

SOLUTION:

对于题意,要求最短的表达式,当用最小循环元来表示一个字符串时,其表达式才最短。
对于字符串S自匹配求出next数组,分析可以发现:当i-next[i]能整除i时,S[1~i-next[i]]就是S[1~i]的最小循环元。它的最大循环次数就是i/(i-next[i])。
接下来枚举所有字串的最小循环元,取最优。
 
 CODE:

#include "bits/stdc++.h"using namespace std;const int maxn = 1e4 + 100;int n;
char s[maxn];
int Next[maxn];
int f[maxn];void getnext(char str[], int l) {for (int i = 2, j = 0; i <= l; i++) {while (j > 0 && str[i] != str[j + 1]) j = Next[j];if (str[i] == str[j + 1]) j++;Next[i] = j;}
}int main() {//freopen("input.txt", "r", stdin);int N, now, temp;scanf("%d", &N);while (N--) {scanf("%s", s + 1);n = strlen(s + 1);for (int i = 0; i <= n; i++)f[i] = i;for (int i = 1; i <= n; i++) {getnext(s + i - 1, n - i + 1);for (int j = i; j <= n; j++) {f[j]=min(f[j],j-i+1+f[i-1]);now = j - i + 1;if (now % (now - Next[now]) == 0) {f[j] = min(f[j], f[i - 1] + now - Next[now]);}}}printf("%d\n", f[n]);}return 0;
}

  

转载于:https://www.cnblogs.com/zhangbuang/p/11279023.html

L - Finding the Bases(KMP+dp)相关推荐

  1. HDU5763 Another Meaning(KMP+dp)

    题意: 给你一个主串一个子串,然后主串中匹配到子串就可以把当前部分改为*, 问主串有多少中不同的样子 思路: 先KMP预处理主串中所有匹配到子串的末尾位置 然后用dp dp[N][2]只更新成功匹配的 ...

  2. 2017 Multi-University Training Contest - Team 4:1002. Classic Quotation(KMP+DP)

    题意:给你两个字符串S和T,每次询问(L, R)求出所有满足x<=L, y>=R的(x, y),S串的前x个字符和后y个字符接在一起后包含字符串T的个数之和 说实话..这题会做题解也还是看 ...

  3. hdu3689(kmp+dp)

    题意:问随机生成一个长度为m(m<=1000)长度的字符串,出现某个子串s的概率是多少. 解法:dp+kmp优化.ans[i][j]表示i长度,走到了s的j位置的概率,当然这是在i之前没有出现s ...

  4. HDU5763 another meaning -(KMP+DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5763 思路:dp[i]表示前i个字符组成的字符串所表示的意思数量,则当匹配时dp[i]=dp[i-1] ...

  5. HDU 3336 Count the string(KMP+DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3336 题意:给你一个字符串,计算其所有前缀在该字符串出现的次数的总和. 思路:next[j]=i,代表 ...

  6. Perfect service(树形dp)

    Perfect service(树形dp) 有n台机器形成树状结构,要求在其中一些机器上安装服务器,使得每台不是服务器的计算机恰好和一台服务器计算机相邻.求服务器的最小数量.n<=10000. ...

  7. 最大搜索二叉子树大小(树形dp)

    给定一颗二叉树的头节点head,返回这棵二叉树中最大的二叉搜索子树 (二叉搜索树:该二叉树中左子树所有节点比它小,右子树所有节点比它大 ): 思路: 这是一道分析可能性求解在二叉树上做类似动态规划的问 ...

  8. HDU 1520 Anniversary party(树形dp)

    HDU 1520 Anniversary party(树形dp) 树形dp第一题!!! 题意很清晰,思路也很明确.很容易找到根节点,即最大的boss,通过根节点向下dp. 状态转移方程: int to ...

  9. 「SDOI2016」储能表(数位dp)

    「SDOI2016」储能表(数位dp) 神仙数位 \(dp\) 系列 可能我做题做得少 \(QAQ\) \(f[i][0/1][0/1][0/1]\) 表示第 \(i\) 位 \(n\) 是否到达上界 ...

  10. 力扣- - 最短回文串(KMP算法)

    力扣- - 最短回文串(KMP算法) 文章目录 力扣- - 最短回文串(KMP算法) 一.题目描述 二.分析之KMP算法 1.暴力法 2.KMP算法 3.next数组求法1:暴力查找最长的前后缀 4. ...

最新文章

  1. 真能一快遮百丑?为什么要弃坑 FastJson
  2. intelij maven
  3. 2016宁波计算机程序复赛,宁波第31届中小学生计算机程序设计竞赛复赛试题小学组.PDF...
  4. Spring Cloud微服务之公共服务模块抽取(五)
  5. python之cookbook-day03
  6. go语言的struct
  7. MS Sql Server 数据库或表修复(DBCC CHECKDB)
  8. win 2008 R2 域服务器策略同步异常解决方案。
  9. spss数据调整后重新计算
  10. 【华为机试题 HJ91】走方格的方案数
  11. C++ Boost库:互斥量 mutex
  12. python绘制密度散点图
  13. python一入深似海-模块化编程-钢铁侠战甲(二)
  14. 链栈的数据结构以及链栈的实现
  15. 广东省公共资源交易平台逆向分析
  16. 将您重定向的次数过多什么意思_【linux二三轶事】重定向是啥?文件描述符是啥?...
  17. Mac book air在浏览器中显示flash过期问题
  18. 飞机大战-子弹的实现
  19. 微信H5支付及通知回调
  20. 【IT行业常见缩写】IT行业常见缩写(程序员专用)

热门文章

  1. 六石管理学:座位可以考虑混排
  2. 全网首发:java[50077:153519] Cocoa AWT: Not running on AppKit thread 0 when expected. libawt_lwawt.dylib
  3. error LNK2019: 无法解析的外部符号 ,该符号在函数 中被引用
  4. 文字处理技术:研究下划线,得到一个奇怪的数字4.55
  5. 编程基本功:为了突出工作重点,正确造假
  6. 热感传导不能证明经络的存在
  7. 编译安装汇总:nVidia驱动/CUDA/cuDNN/TensorRT/OpenCV/gstreamer/DeepStream/jpeglib等
  8. 音频格式G711转PCM的代码
  9. was进程内存占用过大_Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决...
  10. sap 双计量单位_SAP双计量单位配置指南CUNI.doc