本篇博客只是留个辣鸡的自己标记一下,误入的同学请出门左转博客

https://blog.csdn.net/loy_184548/article/details/50865777

代码神马的也是复制啊

#include <bits/stdc++.h>
#define mst(a) memset(a,0,sizeof (a))
#define FOR(i,n) for (int i = 0; i < n; i++)
#define INF 1e9
#define mod 1000000007
#define eps 1e-10
using namespace std; typedef long long ll;
int n;
string s;
int lcp[][];
int dp[][]; //前i长度,最后一个数长度为j的方法数
int sum[][];
void getLcp() //最长公共前缀lcp
{
for (int i = n; i > ; i--)
{
for (int j = n; j > i; j--)
{
if (s[i] == s[j]) lcp[i][j] = lcp[i + ][j + ] + ;
else lcp[i][j] = ;
}
}
}
bool check(int a,int b)
{
char ret1 = s[a+lcp[a][b]];
char ret2 = s[b+lcp[a][b]];
if (ret1 < ret2) return true; //满足条件返回1
else return false;
}
void solve()
{
for (int i = ; i <= n; i++) sum[][i] = ; //初始化
for (int i = ; i <= n; i++)
{
for (int j = ; j <= i; j++)
{
/*在前面基础上加上一段j长度*/
int len = i - j + ; //j串的开头位置
if (s[len] == '') continue; //处理前缀0 /*1.处理前面最后一段比j短的情况(即数字一定比j小)*/
dp[i][j] = sum[len - ][j - ]; //sum[i][j]表示前i长度,最后一个长度为小于j的方法总数 /*2.处理前面最后一段和j相等的情况*/
int tmp = len - j;
if (tmp < ) continue; //前面总长度没有j长
if (check(tmp,len) && lcp[tmp][len] < j) //判断j这段是否满足条件
{
dp[i][j] = (dp[i][j] + dp[len - ][j]) % mod;
}
}
for (int j = ; j <= n; j++)
{
sum[i][j] = (sum[i][j - ] + dp[i][j]) % mod;
}
}
}
int main(){
cin >> n >> s;
s = " " + s;
/*求出最长公共前缀lcp,用于快速比较两个数的大小
如果lcp[a][b] >= len,说明两个数字相等
否则比较s[a+lcp[a][b]]和s[b+lcp[a][b]]即可
*/
getLcp(); //最长公共前缀lcp
solve();
ll ans = ;
for (int i = ; i <= n; i++)
{
ans = (ans + dp[n][i]) % mod;
}
cout << ans << endl;
return ;
}

CF611D lcp+dp的更多相关文章

  1. Codeforces 822E Liar dp + SA (看题解)

    Liar 刚开始感觉只要开个dp[ i ][ j ][ 0 / 1 ]表示处理了s的前 i 个用了 k 段, i 是否是最后一段的最后一个字符 的 t串最长匹配长度, 然后wa24, 就gg了.感觉这 ...

  2. Codeforces_825

    A.连续1的个数,0用来分割,注意连续的0. #include<bits/stdc++.h> using namespace std; int n; string s; int main( ...

  3. CF1073G Yet Another LCP Problem 后缀自动机 + 虚树 + 树形DP

    题目描述 记 $lcp(i,j)$ 表示 $i$ 表示 $i$ 这个后缀和 $j$ 这个后缀的最长公共后缀长度给定一个字符串,每次询问的时候给出两个正整数集合 $A$ 和 $B$,求$\sum_{i\ ...

  4. 树形DP+RMQ+单调队列(Bob’s Race HDU4123)

    题意:有n个房子,这些房子被n-1条道路连接,有一些运动员从一个房子为起点尽可能跑最远的距离且不能通过一条道路超过两次,这些运行员不能选择同样的起点,这些运动员跑的最远距离和最近距离的差值不能超过Q, ...

  5. 来自多校的一个题——数位DP+卡位

    n<=1e9就要考虑倍增.矩阵乘法这种了 假设L=0 考虑枚举二进制下,所有X与R的LCP长度,前len高位 对于第len+1位,假设R的这一位是1 如果一个x的这一位是0了,那么后面可以随便填 ...

  6. 【做题】ECFinal2018 J - Philosophical … Balance——dp

    原文链接 https://www.cnblogs.com/cly-none/p/ECFINAL2018J.html 题意:给出一个长度为\(n\)的字符串\(s\),要求给\(s\)的每个后缀\(s[ ...

  7. Codeforces Round #422 (Div. 2)E. Liar sa+st表+dp

    题意:给你两个串s,p,问你把s分开顺序不变,能不能用最多k段合成p. 题解:dp[i][j]表示s到了前i项,用了j段的最多能合成p的前缀是哪里,那么转移就是两种,\(dp[i+1][j]=dp[i ...

  8. Educational Codeforces Round 53 (Rated for Div. 2)G. Yet Another LCP Problem

    题意:给串s,每次询问k个数a,l个数b,问a和b作为后缀的lcp的综合 题解:和bzoj3879类似,反向sam日神仙...lcp就是fail树上的lca.把点抠出来建虚树,然后在上面dp即可.(感 ...

  9. BZOJ.4199.[NOI2015]品酒大会(后缀自动机 树形DP)

    BZOJ 洛谷 后缀数组做法. 洛谷上SAM比SA慢...BZOJ SAM却能快近一倍... 只考虑求极长相同子串,即所有后缀之间的LCP. 而后缀的LCP在后缀树的LCA处.同差异这道题,在每个点处 ...

随机推荐

  1. Django REST framework基础:序列化

    表结构: class Article(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(m ...

  2. PHP命令执行与防范

    命令执行漏洞是指攻击者可以随意执行系统命令,是高危漏洞之一. 命令连接符:&  &&   ||     | 如:ping www.baidu.com && ne ...

  3. python小白——进阶之路——day3天-———容器类型数据+Number类型强制类型转换

    -->Number 部分 int :     整型   浮点型 布尔类型  纯数字字符串 float:    整型   浮点型 布尔类型  纯数字字符串 complex:  整型   浮点型 布 ...

  4. go笔记-值传递、引用传递

    eg: func sliceModify(slice []int) { // slice[0] = 88 slice = append(slice, ) } func main() { slice : ...

  5. 微服务领域是不是要变天了?Spring Cloud Alibaba正式入驻Spring Cloud官方孵化器!

    引言 微服务这个词的热度自它出现以后,就一直是高烧不退,而微服务之所以这么火,其实和近几年互联网的创业氛围是分不开的. 与传统行业不同,互联网企业有一个特点,那就是市场扩张速度非常之快,可能也就是几天 ...

  6. 简单的JQuery完美拖拽

    首先导入jq库,最好是1.0版本的.调用函数时,传入要拖拽元素的id值. function drag(sel){ $div = $("#"+sel); $div.mousedown ...

  7. vue 限制输入字符长度

    一.watch方法: <input v-model="textareaValue" type="textarea" placeholder="请 ...

  8. 面试题(一续Spring)

    9.Spring体系结构和jar用途 参考https://blog.csdn.net/sunchen2012/article/details/53939253 spring官网给出了一张spring3 ...

  9. Kivy 中文教程 实例入门 简易画板 (Simple Paint App):1. 自定义窗口部件 (widget)

    1. 框架代码 用 PyCharm 新建一个名为 SimplePaintApp 的项目,然后新建一个名为 simple_paint_app.py 的 Python 源文件, 在代码编辑器中,输入以下框 ...

  10. ML.NET is an open source and cross-platform machine learning framework

    https://www.microsoft.com/net/learn/apps/machine-learning-and-ai/ml-dotnet Machine Learning made for ...