【JZOJ 5220】 C

news/2024/12/12 23:52:43/

Description

给定A,B两个串,设LCS(A,B)=n
求A中所有长度为 n 的子序列(共2^n个)中,有多少个是B串的子序列
串长<=1000

Analysis

相当于在A中选n个位置,与B中n个位置进行匹配
设状态(x,y,z)表示A匹配到x,B匹配到y,已匹配个数为z的方案
考虑A中第x个选不选,不选转移到(x+1,y,z)
选转移到(x+1,p+1,z+1),p是b[y~n]中最小使b[p]=a[x]的位置
由于当状态(x,y,z)中z< LCP(A[1~x],B[1~y])时,肯定不优
所以状态表示可优化成2维
那么写dp或者记忆化搜索都是资瓷的
状态O(N^2)个,转移O(1)

Code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
#define efo(i,v) for(int i=last[v];i;i=next[i])
#define min(x,y) ((x)<(y)?(x):(y))
#define max(x,y) ((x)>(y)?(x):(y))
using namespace std;
typedef long long ll;
const int N=1005,mo=1e9+7;
int n,ans,la,lb,f[N][N],nxt[N]['z'+5];
ll g[N][N];
bool bz[N][N];
char a[N],b[N];
ll dfs(int x,int y,int l)
{
    if(l<f[x-1][y-1]) return 0;
    if(x>la+1 || y>lb+1) return 0;
    if(l>=n) return 1;
    int p=nxt[y][a[x]];
    ll t=0;
    if(p && l+1>=f[x][p])
    {
        if(bz[x+1][p+1]) t=(t+g[x+1][p+1])%mo;
        else t=(t+dfs(x+1,p+1,l+1))%mo;
    }
    if(bz[x+1][y]) t=(t+g[x+1][y])%mo;
    else t=(t+dfs(x+1,y,l))%mo;
    g[x][y]=t,bz[x][y]=1;
    return t;
}
int main()
{
    scanf("%s\n%s",a+1,b+1);
    la=strlen(a+1),lb=strlen(b+1);
    fd(i,lb,1)
    {
        fo(j,'a','z') nxt[i][j]=(i+1<=lb)?nxt[i+1][j]:(lb+1);
        nxt[i][b[i]]=i;
    }
    fo(i,1,la)
        fo(j,1,lb)
        {
            f[i][j]=max(f[i-1][j],f[i][j-1]);
            if(a[i]==b[j]) f[i][j]=max(f[i][j],f[i-1][j-1]+1);
        }
    n=f[la][lb];
    printf("%lld",dfs(1,1,0));
    return 0;
}

http://www.ppmy.cn/news/389629.html

相关文章

Sun SPARC Enterprise T5120/5220/5140/5240修改ILOM密码

环境/产品 1&#xff0e;硬件&#xff1a;Sun SPARC Enterprise T5240(FW: 7.2.9.b&#xff1b;OBP: 4.30.8.a&#xff1b;ILOM: 3.0.10.2.b) 2&#xff0e;软件&#xff1a;Solaris 10 现象描述 默认用户和密码无法登录SP(root/changeme) 解决方法一&#xff08;适用于ILOM版…

nokia 5220 XpressMusic 自己刷机

看了半天各种论坛&#xff0c;是在不知道从哪里下手&#xff0c;所以自己写一篇自己刷机的新的。凤凰那个软件好像已经挂了&#xff0c;每次打开就是service is not authorized. 所以还是使用nokia自己的官方下载平台。 见csdn的下载地址: http://download.csdn.net/detail/cct…

sun服务器如何检查告警信息,SUN T5220面板告警故障处理

客户反映:SUN T5220后面板告警,及前面板FAN指示灯告警。 1/登进串口控制台,默认进入“sc>”用户终端(此终端为admin用户所登陆,之前有人登陆。) 注:登进串口控制台,root用户(初始密码:changeme),在无admin用户情况下,创建admin用户: create /SP/users/admin password…

dod刷服务器文件,DoD 5220.22-M和Gutmann两种硬盘擦除算法

DoD 5220.22-M的说明 Use this seven-pass method for tighter security. Different patterns of bytes are written to the disk as described in the table below. Using this method is probably even safer than using the simple method (with 6 passes). This method is …

sun t系列服务器,SUN Netra T5220 /Sun T5229 服务器

说明 / 部件 NT52-104B-04GD1-DC Netra T5220 DC 服务器&#xff0c;4 核 1.2 GHz UltraSPARC T2 处理器&#xff0c;4 GB 内存(4 个 1 GB DIMM)&#xff0c;1 个 146 GB 2.5 英寸 10000 rpm SAS 磁盘驱动器&#xff0c;1 个 DVD Slimline 驱动器&#xff0c;2 (11) 个电源&…

【工业控制】学习喷墨打印技术 怎么能不知道波形

00. 目录 文章目录 00. 目录01.概述02. 喷头构造03. 脉冲时间04. 共振情况05. 多重脉冲06. 参考资料 01.概述 转自微信公众号&#xff1a;柔性电子服务平台 作者&#xff1a;glassjoy 依稀记得前段时间的重磅新闻&#xff0c;京东方成功研制中国首款采用喷墨打印技术的55英寸…

基于图像处理的数码印花喷墨墨滴形状规范的研究(Python+OpenCV+Mysql)

大体思路&#xff1a;由于墨滴的不同参数会对墨滴的形态产生一定的影响&#xff0c;故如果通过研究墨滴的形态则通过海量的数据就可以大概确定墨滴的各项参数指标的范围。通过OpenCV对墨滴的喷出的形状进行图像处理&#xff0c;对墨滴图像进行一系列的分析&#xff0c;通过一系…