HDU 5282 Senior's String DP(LCS变形)
来源:互联网 发布:龙歌ol mac版本 编辑:程序博客网 时间:2024/06/06 10:57
HDU 5282
题意:给出两个字符串a,b.假如a,b的LCS长度为L,从a中选出子序列长度为LCS并且该子序列在b中出现,问有多少种方案?
| a|,|b|<=1e3. (长度为L的子序列有2^L个).两个子序列有某个位置选择的下标不同就视为个不同.
dp[i][j]:a的前缀i和b的前缀j的LCS长度.
f[i][j]:a的前缀i有多少个长度为dp[i][j]的子序列出现在b的前缀j中.
然后现在考虑选不选a的第i个字符.
不选a[i],则需要dp[i-1][j]=dp[i][j].
选a[i],则此时的LCS最后一个字符为a[i] 找到b的前缀j中字符a[i]最后一次出现的位置p
题意:给出两个字符串a,b.假如a,b的LCS长度为L,从a中选出子序列长度为LCS并且该子序列在b中出现,问有多少种方案?
| a|,|b|<=1e3. (长度为L的子序列有2^L个).两个子序列有某个位置选择的下标不同就视为个不同.
dp[i][j]:a的前缀i和b的前缀j的LCS长度.
f[i][j]:a的前缀i有多少个长度为dp[i][j]的子序列出现在b的前缀j中.
然后现在考虑选不选a的第i个字符.
不选a[i],则需要dp[i-1][j]=dp[i][j].
选a[i],则此时的LCS最后一个字符为a[i] 找到b的前缀j中字符a[i]最后一次出现的位置p
则如果选a[i] 则要满足dp[i-1][p-1]+1=dp[i][j].
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e3+5,inf=0x3f3f3f3f;const ll mod=1e9+7;char a[N],b[N];ll dp[N][N],f[N][N];int last[27];int main(){ int T; cin>>T; while(T--) { memset(f,0,sizeof(f)); memset(dp,0,sizeof(dp)); scanf("%s%s",a+1,b+1); int n=strlen(a+1),m=strlen(b+1); f[0][0]=1; for(int j=1;j<=m;j++) f[0][j]=1; for(int i=1;i<=n;i++) { f[i][0]=1; memset(last,-1,sizeof(last)); for(int j=1;j<=m;j++) { last[b[j]-'a']=j; if(a[i]==b[j]) dp[i][j]=dp[i-1][j-1]+1; dp[i][j]=max(dp[i][j],max(dp[i-1][j],dp[i][j-1])); if(dp[i-1][j]==dp[i][j]) f[i][j]=f[i-1][j]; int p=last[a[i]-'a']; if(p!=-1) { if(dp[i-1][p-1]+1==dp[i][j]) f[i][j]=(f[i][j]+f[i-1][p-1])%mod; } } } printf("%lld\n",f[n][m]); } return 0;}
阅读全文
0 0
- HDU 5282 Senior's String DP(LCS变形)
- HDU 5282 Senior's String (两次dp LCS预处理)
- hdu 5282 Senior's String 两次dp
- [dp] hdu 5282 Senior's String
- hdu 5282 Senior's String
- hdu 5282 Senior's String
- HDU 5282 Senior's String
- 【DP】 HDOJ 5282 Senior's String
- hdu 5282 Senior's String动态规划
- HDU 5282:Senior's String 双重动态规划
- hdu 5280 Senior's Array(dp)
- HDU 1087 lcs变形 (简单DP)
- 杭电 hdu 5280 Senior's Array(dp)
- HDU 5280 Senior's Array(DP思想 暴力)
- HDU 4681 String (dp, LCS | 多校8)
- hdu 4681 String(暴力&dp&LCS)
- hdu 1080(LCS变形)
- HDU 5280 Senior's Array
- 远程连接mysql数据库
- 修改文件测试的测试点
- Spring Boot系列(七):springboot+mybatis多数据源最简解决方案
- monkey操作详解
- 退出返回登录界面(存在问题)
- HDU 5282 Senior's String DP(LCS变形)
- 数据结构上机实践第四周项目2
- 关于计算机中的原码、反码、补码的区别
- 常用shell命令
- 成都站 |《数驱·手游-CP业务增长之道》线下沙龙有一起去的小哦伙伴吗?
- Json串传后台-处理(终极)
- 第七周项目三 负数把正数赶出队列
- swift和oc混用如何创建header文件
- IntelliJ IDEA 快捷键