/*
题意:给一个长度不超过5000的字符串,每个字符都是0到9的数字。
要求将整个字符串划分成严格递增的几个数字,并且不允许前导零。
思路:
1.很开心得发现,当我在前i个区间以后再加一个区间的时候,转移
的条件只跟最后一个区间的数字大小有关,这决定这道题可以dp...
2.dp[i][j]代表前j个字符,最后划分的区间的第一个字符是第i个的答案数。
3.可知对于所有的dp[i][i...n]他们的答案都取决与dp[1...i-1][i-1].
4.很容易想到对于同一个i,累加求得dp[i][k]的值,但是如何判断
数字大小呢...首先长度不同的情况下直接根据长度判断即可(因为不允许
前导零)。长度相同的情况下,需要比较这两个字符串哪个大。这个时候
预处理出 ook[i][j]代表以第i个位置和第j个位置为开头的两个字符串他嗯
第一个不相同的字符的位置。 */ // 2016/9/6 13:07
#include<bits/stdc++.h>
#define N 5005
using namespace std;
int ook[][];
long long dp[N][N];
long long mod=1e9+;
char jilu[N];
int main()
{
int n;
scanf("%d%s",&n,jilu+);
memset(ook,0x3f,sizeof(ook));
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(jilu[i]!=jilu[j]){
int k=;
while(i-k>&&j-k>&&ook[i-k][j-k]>k){
ook[i-k][j-k]=k;
k++;
}
}
}
}
for(int i=;i<=n;i++){
if(jilu[i]=='')continue;
long long sum=;
int a=i-,b=i;
while(b<=n){
if(i==){
dp[i][b]=;
}
else{
while(a>&&i-a<b-i+){
sum+=dp[a][i-];
sum%=mod;
a--;
}
if(a>&&ook[a][i]<=b-i&&jilu[a+ook[a][i]]<jilu[i+ook[a][i]]){
sum+=dp[a][i-];
sum%=mod;
a--;
}
dp[i][b]=sum;
}
b++;
}
}
long long ans=;
for(int i=;i<=n;i++){
ans+=dp[i][n];
ans%=mod;
}
printf("%lld\n",ans);
}

Codeforces 611d [DP][字符串]的更多相关文章

  1. Codeforces 611D New Year and Ancient Prophecy dp+字符串比较

    这是CF Goodbye 2015 的D题,当时我想了一个n^3的dp算法,肯定不能过,然后听到学长后缀数组的n^2log(n)写法,仰慕 最后打完比赛看到了t神的n^2写法,简直膜拜,直接省去了后缀 ...

  2. Codeforces 176B (线性DP+字符串)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28214 题目大意:源串有如下变形:每次将串切为两半,位置颠倒形成 ...

  3. Codeforces Round #367 (Div. 2) A B C 暴力 二分 dp(字符串的反转)

    A. Beru-taxi time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  4. Codeforces 1150D(字符串dp)

    反思 三维的dp压根没看出来,看题解以后思路又很直观,找几道字符串dp练练才行 序列自动机和优化一维略 /* __ __ * ____| |_____| |____ * | | * | __ | * ...

  5. Codeforces 1303E. Erase Subsequences 代码(dp 字符串压缩一维状态优化)

    https://codeforces.com/contest/1303/problem/E #include<bits/stdc++.h> using namespace std; ; i ...

  6. CodeForces - 706C Hard problem(dp+字符串)

    题意:有n个字符串,只能将其逆转,不能交换位置,且已知逆转某字符串需要消耗的能量,问将这n个字符串按字典序从小到大排序所需消耗的最少能量. 分析:每个字符串要么逆转,要么不逆转,相邻两个字符串进行比较 ...

  7. codeforces的dp专题

    1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...

  8. CodeForces 607C (DP) Hard problem

    题目:这里 题意:给定n个字符串,每个字符串可以进行一项操作,就是将这个字符串交换,就是该字符串的第一个和最后一个交换,第二个和倒数第二个交换,以此类推,当然可以选择对于 该字符串进行或不进行这项操作 ...

  9. HDU 2089 数位dp/字符串处理 两种方法

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

随机推荐

  1. fiddler filter 过滤css 图片等

    找到 request header->Show only if yrl contains: REGEX:(?insx)/[^\?/]*\.(css|ico|jpg|png|gif|bmp|wav ...

  2. eclipse color themes 让eclipse编码好看点

    http://eclipsecolorthemes.org/ 就是这个,很好用的! 安装后需要重启Eclipse.重启后打开Window->Preferences->General-> ...

  3. Zabbix 教程

    Zabbix 教程http://blog.csdn.net/linuxlsq/article/details/52606086 MySQL在以下几种情况会创建临时表:1.UNION查询:2.用到TEM ...

  4. Eclipse中新建jsp文件访问页面时乱码问题

    新建.jsp文件,charset和pageEncoding默认是ISO-8859-1,这样的话访问页面时会出现乱码,解决办法:将charset和pageEncoding改为UTF-8(或者GBK/GB ...

  5. HDP2.4安装(五):集群及组件安装

    HDP(Hortonworks Data Platform)是hortworks推出的100%开源的hadoop发行版本,以YARN 作为其架构中心,包含pig.hive.phoniex.hbase. ...

  6. Struts2 - Rest(1)

    Struts2提供了一个restful的插件:struts2-rest-plugin-2.3.16.1.jar 这个插件可以把Struts2当做restful来使用,不过它的rest功能目前来说有点“ ...

  7. 05文件与IO

    这节主要学习了read.write.lseek.目录访问(opendir.readdir.closedir)这几个系统调用及其简单的应用. 一旦有了与一个打开文件描述相连的文件描述符,只要该文件是用O ...

  8. bzoj2289: 【POJ Challenge】圆,圆,圆

    Description 1tthinking随便地画了一些圆. ftiasch认为这些圆有交集(面积非零)的可能性不大.因为他实在画了太多圆,所以你被请来判断是否存在交集. Input 第1行,一个整 ...

  9. iPerf - The network bandwidth measurement tool

    What is iPerf / iPerf3 ? iPerf3 is a tool for active measurements of the maximum achievable bandwidt ...

  10. VisualStudio 调试不提示调试错误

    尝试办法: 1.工具->选项->调试->启用异常助手;2.调试->异常; 解决办法: 把2.调试->异常; 下地全部钩上异常就弹出来了