【XSY2564】sequence
2024-10-06 16:09:05
Description
【题目描述】
给定一个长度为n的由['0'..'9']组成的字符串s,v[i,j]表示由字符串s第i到第j位组成的十进制数字。
将它的某一个上升序列定义为:将这个字符串切割成m段不含前导'0'的串,切点分别为k1,k2...km-1,使得v[1,k1]<v[k1+1,k2]<...<v[km-2,km-1]。
请你求出该字符串s的上升序列个数,答案对 10^9+7 取模。
【输入数据】
第一行一个整数n,表示字符串长度;
第二行n个['0'..'9']内的字符,表示给出的字符串s。
【输出数据】
仅一行表示给出字符串s的上升序列个数对10^9+7取模的值。
【样例输入1】
6
123434
【样例输出1】
8
【样例输入2】
8
20152016
【样例输出2】
4
【数据范围】
对于30%的数据满足:n<=10;
对于100%的数据满足:n<=5000。
考虑DP
因为保证\(v[i][j]!=0\)
所以设\(dp[i][j]\)表示将以i为起始往后移动j个字符(i也算)为结束所产生的上升序列个数。
我们用后缀和,这样答案就是\(dp[1][1]\)。
用a数组记录从两个点开始最多重复多少个字符,以便于我们比较大小。
如果以i开始的字符串比以i+j开始的字符串小,符合题意,更新。
\(dp[i][j]+=dp[i+j][j]\)
如果以i开始的字符串大于等于以i+j开始的字符串,只能由这一位后面的全部字符更新。
$ dp[i][j]+=dp[i+j][j+1]$
综上。
#include<bits/stdc++.h>
#define mod 1000000007
using namespace std;
int a[5010][5010],dp[5010][5010],n;
char ch[5010];
bool check(int x,int y)
{
int l=min(y-x-1,a[x][y]);
return ch[x+l]<ch[y+l];
}
int main()
{
scanf("%d%s",&n,ch+1);
for(int i=n;i;i--)
{
for(int j=i+1;j<=n;j++)
{
if(ch[i]==ch[j])
{
a[i][j]=a[i+1][j+1]+1;
}
}
}
for(int i=n;i;i--)
{
if(ch[i]=='0')
{
continue;
}
dp[i][n-i+1]=1;
for(int j=1;j<=n-i;j++)
{
if(check(i,i+j))
{
dp[i][j]=(dp[i][j]+dp[i+j][j])%mod;
}else{
dp[i][j]=(dp[i][j]+dp[i+j][j+1])%mod;
}
}
for(int j=n-i;j;j--)
{
dp[i][j]=(dp[i][j]+dp[i][j+1])%mod;
}
}
printf("%d\n",dp[1][1]%mod);
return 0;
}
最新文章
- tarjan讲解(用codevs1332(tarjan的裸题)讲解)
- 仿原生app,native特效
- JQuery_过滤选择器
- linux命令单次或组合样例
- 初识 istringstream、ostringstream、stringstream 运用
- C语言bool类型定义
- 编译内核,配置内核make menuconfig
- 动态图片 gif
- class Core<;T>; where T : class, new() 求解
- Vijos 1981 跳石头 二分
- android手机状态解释,比方android.os.Build.VERSION.SDK
- obj-c编程06:反射与元编程初步
- TensorFlow-谷歌深度学习库 命令行参数
- x86汇编语言实践(2)
- MyBatis ResultMap Assocation 返回属性为null的问题
- ocLazyLoad按顺序加载
- linux服务器last查看关机记录
- rabbitmq heartbeat missing with heartbeat = N seconds原因总结
- css - bootstrap3下拉菜单点击之后怎么改变背景颜色?
- ASP.NET MVC呼叫WCF Service的方法
热门文章
- IOS上传到App Store出现证书未安装问题
- 【NOIP2009】道路游戏
- 局部敏感哈希LSH(Locality-Sensitive Hashing)——海量数据相似性查找技术
- 性能测试:Jmeter压测过程中的短信验证码读取
- 正确理解IM长连接的心跳及重连机制,并动手实现(有完整IM源码)
- MyEclipse10 使用JRebel实现热部署
- [NOIp2013] luogu P1966 火柴排队
- 《FFT家族—从不会到崩溃(坑)》读blog笔记
- opencv::模板匹配(Template Match)
- opencv::基本阈值操作