这是CF Goodbye 2015 的D题,当时我想了一个n^3的dp算法,肯定不能过,然后听到学长后缀数组的n^2log(n)写法,仰慕

最后打完比赛看到了t神的n^2写法,简直膜拜,直接省去了后缀数组,而且用一个sum由n^3变成了n^2,唉,经验无与伦比。Orz..

下面的代码就是我照着写的:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<cstdlib>
#include<vector>
#include<queue>
using namespace std;
typedef long long LL;
const int maxn=;
const int mod=1e9+;
int dp[maxn][maxn];
int f[maxn][maxn];
char s[maxn];
bool cmp(int i,int j,int len)
{
if(f[i][j]>=len)return false;
return s[i+f[i][j]]<s[j+f[i][j]];
}
int main()
{
int n;
scanf("%d%s",&n,s+);
for(int i=n; i>; --i)
for(int j=i+; j<=n; ++j)
if(s[i]==s[j])f[i][j]=f[i+][j+]+;
int ans=;
for(int i=; i<=n; ++i)
{
int sum=;
for(int j=i; j<=n; ++j)
{
if(s[i]=='')
dp[i][j]=;
else if(i==)dp[i][j]=;
else
{
int len=j-i+;
bool flag=;
if(i-len>=&&cmp(i-len,i,len))
{
flag=;
sum=(sum+dp[i-len][i-])%mod;
}
dp[i][j]=sum;
if(!flag&&i-len>=) sum=(sum+dp[i-len][i-])%mod;
}
if(j==n)ans=(ans+dp[i][j])%mod;
}
}
printf("%d\n",ans);
return ;
}

最新文章

  1. js中转移符
  2. easyui日期在未加载easyui-lang-zh_CN.js出现英文的情况下加载中文的方法
  3. 003商城项目:数据库的创建以及ssm框架的整合
  4. Xcode UIView 中的Button 控件的属性和基本用法
  5. (String) | String.valueOf()
  6. Oracle Erp常用网站
  7. NSS_06 extjs弹出窗口上的文本框默认获得焦点
  8. AspNetPager分页实际应用
  9. 转:HTML与URL两种录制模式分析
  10. git工具使用方法及常用命令
  11. Sublime Text 3 修改配色方案
  12. J2SE-包装类
  13. ios和android 浏览器适配问题总结
  14. java使用格式String型转成Date型
  15. git关联了无用的,取消关联,并重置gitignore
  16. Java内存模型概念简单介绍,想深入自行百度
  17. [Java in NetBeans] Lesson 05. Method/function
  18. C++连接mysql数据库的两种方法
  19. LeetCode 题解之Add Digits
  20. numpy 初识(二)

热门文章

  1. 友盟分享在appdelegate中的调用语句举例
  2. unity脚本的基础语法
  3. hdu 4712 Hamming Distance(随机函数暴力)
  4. Hibernate缓存机制简述 (转)
  5. 【斜率DP】bzoj1597: [Usaco2008 Mar]土地购买
  6. [转载]JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
  7. DeepFace--Facebook的人脸识别(转)
  8. setTimeout浅析
  9. 认识RGB和YUV
  10. 详细解析: VictorOps 是如何利用和完善 ChatOps?