f[i = 以i结尾][j = 长度为j] = 方案数。

f[i][j] = sum{ f[i-j][k] , k < j || (k == j && s(i-j+1,j) > s(i-2*j+1,j) ) }

转移为O(N^3)需要优化,

对于k < j,递推g[i][j] = sum(f[i][k], k <= j)。

对于k == j,有O(N^2)个后缀,可以用二维数组lcp[i][j]递推i和j开头的最长公共前缀。

(后缀数组倍增大概也可以做的,用memcpy都可以过的,常数还比较小,极限数据1481ms。

#include<bits/stdc++.h>
using namespace std; typedef long long ll; const int N = 5e3+, mod = 1e9+;
int f[N][N], g[N][N];
char s[N]; int lcp[N][N]; bool bigger(int i, int j, int len)
{
if(lcp[i][j] >= len) return false;
else {
int c = lcp[i][j];
return s[i+c] > s[j+c];
}
} //#define LOCAL
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
int n, i, j;
scanf("%d%s", &n, s+);
if(s[] == ''){ puts(""); return ; }
for(i = n; i > ; i--){
for(j = n; j > ; j--){
if(s[i] == s[j]) lcp[i][j] = lcp[i+][j+]+;
}
} for(i = ; i <= n; i++){
for(j = ; j < i; j++) {
g[i][j] = g[i][j-];
if(s[i-j+] != ''){
f[i][j] = g[i-j][min(j-,i-j)];
if(f[i-j][j] && bigger(i-j+,i-j-j+,j)){
f[i][j] += f[i-j][j];
if(f[i][j] >= mod) f[i][j] -= mod;
}
g[i][j] += f[i][j];
if(g[i][j] >= mod) g[i][j] -= mod;
}
}
f[i][i] = ;
g[i][i] = g[i][i-] + ;
if(g[i][i] == mod) g[i][i] = ;
}
printf("%d\n",g[n][n]);
return ;
}

最新文章

  1. JAVA获取CLASSPATH路径
  2. IOS-01零碎知识总结
  3. 9.27js拓展、bootstrap菜鸟教程
  4. auto(c++11)
  5. Linq之Expression高级篇(常用表达式类型)
  6. C# where(泛型类型约束)
  7. Python文件处理之文件写入方式与写缓存(三)
  8. Xamarin:制作并发布apk
  9. Java开发环境的搭建01——Eclipse篇(Windows)
  10. 写一个python 爬虫爬取百度电影并存入mysql中
  11. Leetcode Articles: Insert into a Cyclic Sorted List
  12. Java 线程池的原理及实现
  13. H: Dave的组合数组(二分法)
  14. 【Java】maven多项目资源共享
  15. #考研笔记#计算机之PPT问题
  16. OOm是否可以try catch ?
  17. Goldengate:ERROR 180 encountered commit SCN that is not greater than the highest SCN already processed
  18. cf-Global Round2-E. Pavel and Triangles
  19. iOS开发-邮件发送
  20. Python 传值和传址 copy/deepcopy

热门文章

  1. PIE SDK栅格数据的金字塔创建
  2. vue 浏览器顶部有载入(进度)动画插件vue-progressbar
  3. journalctl 中文手册
  4. 安装cloudermanager时出现org.spingframework.web.bind.***** host[] is not present at AnnotationMethodHandlerAdapter.java line 738 ****错误(图文详解)(博主推荐)
  5. js判断触摸方向
  6. 数据挖掘:基于Spark+HanLP实现影视评论关键词抽取(1)
  7. lua 遍历table
  8. 深入理解JavaScript系列(29):设计模式之装饰者模式
  9. Spring Chapter4 WebSocket 胡乱翻译 (二)
  10. window 常用MySQL数据库命令总结