题意:

两个串,s  t,求s的所有子串中大于 t  的数目

题解:

  dp[i][j] 表示 s的前i个,匹配 t 的前 j 个的种类数,
  那么 if(s[i] == t[j])
      dp[i][j] = dp[i -1][j] + dp[i - 1][j - 1];
    else
      dp[i][j] = dp[i - 1][j]; 
  对于长度大于 t 的没有前导0的都符合,那么就看长度等于t的就可以了,
  当匹配到 i, j 的时候,if(s[i] > t[j]) 那么该贡献为:
    前面匹配j-1的种类数*后面随便选len2-j个,即当前的贡献就为dp[i - 1][j - 1] * C[len1 - i][len2 - j]。
 

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
const ll mod = ;
char s[N],t[N];
ll C[N][N];
ll dp[N][N];
int main()
{
//打表杨辉三角
C[][] = ;
C[][] = C[][] = ;
for(int i=;i<=;i++){
C[i][] = ;
for(int j=;j<=i;j++){
C[i][j] = C[i-][j-] + C[i-][j] ;
if(C[i][j]>=mod) C[i][j] -= mod ;
}
} int T,n,m;
for( scanf("%d",&T) ; T ; T-- ){
scanf("%d%d",&n,&m);
scanf("%s%s",s+,t+); for(int i=;i<=n;i++){
dp[i][] = ;
}
//计算长度相同时,某一位置比t的位置大,对答案的贡献
ll ans = ;
for(int i=;i<=n;i++){
for(int j=;j<=min(i,m);j++){
dp[i][j] = dp[i-][j] ;
if( s[i] == t[j] ){
dp[i][j] = (dp[i][j] + dp[i-][j-]) % mod ;
}
else if( s[i] > t[j] ){
ans = (ans + (ll)dp[i-][j-] * C[n-i][m-j]) %mod ;
}
}
}
//计算长度大于t串长度时,对答案的贡献
for(int i=;i<=n;i++){
if( s[i] =='' ) continue ;
for(int j=m;j<=n-i;j++){
ans = (ans + C[n-i][j])%mod ;
}
}
printf("%lld\n",ans);
}
return ;
}
 
 
 

【动态规划】subsequence 1的更多相关文章

  1. 动态规划求最长公共子序列(Longest Common Subsequence, LCS)

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  2. hdu 1159:Common Subsequence(动态规划)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  3. 动态规划 Common Subsequence

    描述 A subsequence of a given sequence is the given sequence with some elements (possible none) left o ...

  4. PAT A1007 Maximum Subsequence Sum (25 分)——最大子列和,动态规划

    Given a sequence of K integers { N​1​​, N​2​​, ..., N​K​​ }. A continuous subsequence is defined to ...

  5. HDU 1159 Common Subsequence 动态规划

    2017-08-06 15:41:04 writer:pprp 刚开始学dp,集训的讲的很难,但是还是得自己看,从简单到难,慢慢来(如果哪里有错误欢迎各位大佬指正) 题意如下: 给两个字符串,找到其中 ...

  6. python编写PAT 1007 Maximum Subsequence Sum(暴力 分治法 动态规划)

    python编写PAT甲级 1007 Maximum Subsequence Sum wenzongxiao1996 2019.4.3 题目 Given a sequence of K integer ...

  7. Leetcode之动态规划(DP)专题-392. 判断子序列(Is Subsequence)

    Leetcode之动态规划(DP)专题-392. 判断子序列(Is Subsequence) 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 你可以认为 s 和 t 中仅包含英文小写字母. ...

  8. HDU 1159 Common Subsequence (动态规划、最长公共子序列)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  9. hdu1159Common Subsequence——动态规划(最长公共子序列(LCS))

    Problem Description A subsequence of a given sequence is the given sequence with some elements (poss ...

  10. nlog(n)解动态规划--最长上升子序列(Longest increasing subsequence)

    最长上升子序列LIS问题属于动态规划的初级问题,用纯动态规划的方法来求解的时间复杂度是O(n^2).但是如果加上二叉搜索的方法,那么时间复杂度可以降到nlog(n).  具体分析参考:http://b ...

随机推荐

  1. springMVC配置拦截器、过滤器、前端控制器时遇到的问题总结

    1.业务场景:使用vuejs+springMVC+spring框架搭建一个mis系统,集成SSO单点登录: 2.遇到问题:使用interceptor拦截器配置SSO单点登录,直接敲域名,或者ip+端口 ...

  2. Activity中使用PagerAdapter实现切换代码

    主活动 public class ViewPagerManager extends AppCompatActivity { private ViewPager viewPager; @Override ...

  3. shapefile 输出的地理处理注意事项

    多年来,ESRI 为存储地理信息开发了三种主要数据格式 - coverage 格式.shapefile 格式及地理数据库格式.其中,所开发的 Shapefile 为存储地理及属性信息提供了一种简单的非 ...

  4. 使用 usb 调试的时候,连接上电脑没反应

    使用 usb 调试的时候,连接上电脑没反应 原因: 手机上没有信任本计算机的授权,请在手机上信任该授权 解决方法: 原因就是手机上会有一个弹话框,让我们信任该计算机,我们才可以进行 usb调试 我们的 ...

  5. 1.springboot内置tomcat的connection相关

    最近在研究tomcat的连接超时问题,环境:jdk1.8 + springboot 2.1.1.RELEASE,以下仅为个人理解,如果异议,欢迎指正. springboot的tomcat的几个配置参数 ...

  6. Android屏幕横竖屏切换和生命周期管理的详细总结

    一般的我们去切换屏幕方向都是不希望Activity被重新创建,这时就需要对一些属性进行设置,或者使用代码设置.        今天想学一下Android屏幕横竖屏切换,但是网上很多知识不准确或不正确, ...

  7. mybatis之动态SQL操作之查询

    1)  查询条件不确定,需要根据情况产生SQL语法,这种情况叫动态SQL /** * 持久层 * @author AdminTC */ public class StudentDao { /** * ...

  8. UnicodeEncodeError: 'ascii' codec can't encode characters

    将网页get到之后输入文本出现UnicodeEncodeError: 'ascii' codec can't encode characters错误 f = open('re.txt', 'w') u ...

  9. java代码实现简体繁体转换

    汉字分为简体和繁体字,这是众所周知的,虽然繁体字中国大陆这边用的并不会太多,但时不时的还是会使用到.那么,如何做到简体字和繁体字的转换呢?其实很简单,这里附上一个java版本的简繁体转换,用网上找的接 ...

  10. nodejs的事件循环1

    JavaScript的学习零散而庞杂,因此很多时候我们学到了一些东西,但是却没办法感受到自己的进步,甚至过了不久,就把学到的东西给忘了.为了解决自己的这个困扰,在学习的过程中,我一直试图在寻找一条核心 ...