D Double Strings

题意:

  • 给出两个字符串A, B, 在其中选出两个等长的子序列(可以不连续)a, b,满足a的字典序严格小于b,求这样的方案有多少个,答案mod(1e9+7)

思路:

  • 好的方案的构成是“一段相同的前缀+一个不同字符(a比b小)+长度相同的任意后缀”。枚举不同的字符在两个序列中的位置。
  • 用dp[i][j]表示只考虑 A 中的前 i 个字符和 B 中的前 j 个字符时的相同的子序列的个数,转移可以 O(1),这样可以统计出相同的前缀个数,这部分是 O(|s|*|t|) 的。
  • 长度相同的任意后缀也可以用类似的 dp 计算,或者设 A 中此时剩余长度为 x, B 中剩余长度为 y,不失一般性地设 x≤y,现在要求的就是 ΣC(x,i)*C(y,i) = ΣC(x,x-i)*C(y,i) = C(x+y,x),这部分也是 O(|s|*|t|) 的。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod = 1e9+7;
int n, m, slen, tlen;
char s[5010], t[5010];
int dp[5010][5010], f[5010][5010];
int main(){cin>>s+1>>t+1;slen=strlen(s+1), tlen=strlen(t+1);for(int i=1; i <= tlen; i++){for(int j=1; j <= slen; j++){dp[i][j]= (dp[i][j]+(dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+mod)%mod)%mod;if(t[i]==s[j])dp[i][j]=(dp[i][j]+1LL+dp[i-1][j-1])%mod;f[i][j]=(f[i-1][j]+f[i][j-1])%mod;if(t[i]>s[j])f[i][j] = (f[i][j]+1LL+dp[i-1][j-1])%mod;}}cout<<f[tlen][slen]<<"\n";return 0;
}

【2021牛客暑期多校训练营5】Double Strings(二维字符串dp)相关推荐

  1. 2021牛客暑期多校训练营5 D-Double Strings(dp+组合数)

    D-Double Strings fi,jf_{i,j}fi,j​表示a中前i个字符,b中前j个字符相同子序列的数量,容斥转移 fi,j=fi−1,j+fi,j−1−fi−1,j−1+{(1+fi−1 ...

  2. 2021牛客暑期多校训练营9

    2021牛客暑期多校训练营9 题号 题目 知识点 A A Math Challenge B Best Subgraph C Cells D Divide-and-conquer on Tree E E ...

  3. 2021牛客暑期多校训练营5

    2021牛客暑期多校训练营5 题号 题目 知识点 A Away from College B Boxes 概率 C Cheating and Stealing D Double Strings 线性d ...

  4. 2021牛客暑期多校训练营4

    2021牛客暑期多校训练营4 题号 题目 知识点 A Course B Sample Game C LCS D Rebuild Tree E Tree Xor 思维+线段树 F Just a joke ...

  5. 2021牛客暑期多校训练营3

    2021牛客暑期多校训练营3 题号 题目 知识点 A Guess and lies B Black and white C Minimum grid 二分图匹配 D Count E Math 数论+打 ...

  6. 2021牛客暑期多校训练营2

    2021牛客暑期多校训练营2 题号 题目 知识点 A Arithmetic Progression B Cannon C Draw Grids D Er Ba Game E Gas Station F ...

  7. 2021牛客暑期多校训练营1

    2021牛客暑期多校训练营1 题号 题目 知识点 难度 A Alice and Bob 博弈论 B Ball Dropping 计算几何 签到 C Cut the Tree D Determine t ...

  8. 2021牛客暑期多校训练营2,签到题CDFKI

    2021牛客暑期多校训练营2 题号 标题 已通过代码 通过率 团队的状态 A Arithmetic Progression 点击查看 6/72 未通过 B Cannon 点击查看 34/104 未通过 ...

  9. 2021牛客暑期多校训练营1, 签到题DFBG

    2021牛客暑期多校训练营1 题号 标题 已通过代码 通过率 团队的状态 A Alice and Bob 点击查看 1365/5586 通过(博弈论-打表) B Ball Dropping 点击查看 ...

  10. 【训练题66:状压暴力 | 子集dp】Greater Integer, Better LCM | 2021牛客暑期多校训练营5

    题意 Greater Integer, Better LCM | 2021牛客暑期多校训练营5 给你 a,b,ca,b,ca,b,c ,你需要找到一对 x,yx,yx,y ,满足: lcm(a+x,b ...

最新文章

  1. jquery 读秒,倒数计时方案
  2. 10、MySQL常用运算符概述
  3. linux数据污点标记,Taints和Tolerations(污点和容忍)
  4. linux关闭开发者模式的命今,CentOS防火墙用命令行方式关闭的方式
  5. 移动零—leetcode283
  6. 三十年TCP与七年QUIC 谁才是未来?
  7. [ZT]介绍 10 款非主流的 Web 浏览器
  8. 《收集苹果》 动态规划入门
  9. 2030年春节,你会跟机器人一起过吗?
  10. Linux Shell通过fifo实现多进程并发以及并发数控制
  11. Confluence 6 连接到 Jira 用户管理的限制
  12. fileupload 上传文件函数 --把图片名用日期时间命名
  13. Java、python实现啊哈算法 —— chapter3 枚举 炸弹人
  14. 作文 进入中职计算机班,我的中职生活作文(精选5篇)
  15. Excel 技巧百例:数据透视表的简单使用-行列转换
  16. 这10部功夫片曾拿到金像奖最佳动作设计奖,李连杰主演的就有4部
  17. [歌词生成] 基于LSTM语言模型和seq2seq序列模型:数据爬取、模型思想、网络搭建、歌词生成
  18. 采用Matlab解决最小曼哈顿图问题
  19. System.gc()的理解
  20. 三星Galaxy S20:将侧面按钮更改为电源按钮

热门文章

  1. 阿姆达尔定律(Amdahl's law)
  2. Need ffmpeg exe. You can download it by calling: imageio.plugins.ffmpeg.download()
  3. Logistic Regression 的简单推导
  4. 公司(企业与市场)与商业模式
  5. web 开发 —— html 与 css(div)
  6. fodora lianjie mysql_Fedora 16 下安装MySql 服务器及linux c 连接MySql
  7. python 北上资金_如何查看北向资金? 什么是北向资金 在股市里面,南代表的是HK,北代表的是大陆。北向 = 从南向北流动,那么北向资金就很好理解了,就是HK的... - 雪球...
  8. python画超长图-利用Python画图,千变万化,各种画图技巧!
  9. php和python-php与python谁更适合web开发?为什么?
  10. python从入门到放弃-学Python方法用错,直接从入门到放弃!