题目链接:https://ac.nowcoder.com/acm/contest/881/E

题意:求可分解成n个AB和m个BA的字符串的个数。

思路:

  首先根据贪心思想,前n个A可作为AB的A,后m个A作为BA的A。可以证明,如果将前n个A中的一个作为BA的A,那一定可以从后面找到一个A来替代这个A。同理,前m个B作为BA的B,后n个B作为AB的B。

  如果不满足上面条件,一定不能满足n个AB和m个BA的要求。

  那么可以用dp来做,用dp[i][j]表示有i个A和j个B的前缀方案数。根据下一个选A还是选B可以得到dp[i+1][j]和dp[i][j+1],根据前面的条件有:

  如果i+1<=n,一定符合条件,直接转移,dp[i+1][j]=dp[i+1][j]+dp[i][j]。同理,如果j+1<=m,dp[i][j+1]=dp[i][j+1]+dp[i][j]。

  如果i+1>n,那么需要j>=i+1-n,dp[i+1][j]=dp[i+1][j]+dp[i][j]。同理,如果j+1>m,需要i>=j+1-m,dp[i][j+1]=dp[i][j+1]+dp[i][j]。

  这样合并即可,就得到了转移方程。

AC代码:

  1. #include<cstdio>
  2. using namespace std;
  3.  
  4. const int MOD=1e9+;
  5. const int maxn=;
  6. int dp[maxn<<][maxn<<];
  7. int n,m;
  8.  
  9. int main(){
  10. while(~scanf("%d%d",&n,&m)){
  11. for(int i=;i<=n+m;++i)
  12. for(int j=;j<=n+m;++j)
  13. dp[i][j]=;
  14. dp[][]=;
  15. for(int i=;i<=n+m;++i)
  16. for(int j=;j<=n+m;++j){
  17. if(j>=i+-n)
  18. dp[i+][j]=(dp[i+][j]+dp[i][j])%MOD;
  19. if(i>=j+-m)
  20. dp[i][j+]=(dp[i][j+]+dp[i][j])%MOD;
  21. }
  22. printf("%d\n",dp[n+m][n+m]);
  23. }
  24. return ;
  25. }

2019牛客暑期多校训练营(第一场)-E(DP)的更多相关文章

  1. 2019牛客暑期多校训练营(第二场) H-Second Large Rectangle(单调栈)

    题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 ...

  2. 2019牛客暑期多校训练营(第九场) D Knapsack Cryptosystem

    题目 题意: 给你n(最大36)个数,让你从这n个数里面找出来一些数,使这些数的和等于s(题目输入),用到的数输出1,没有用到的数输出0 例如:3  4 2 3 4 输出:0 0 1 题解: 认真想一 ...

  3. 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)

    layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...

  4. 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...

  5. 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...

  6. 2019牛客暑期多校训练营(第一场) B Integration (数学)

    链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...

  7. 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...

  8. 2019牛客暑期多校训练营(第二场)F.Partition problem

    链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...

  9. 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)

    题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9:  对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可.     后者mod=1e9,5才 ...

  10. 2019牛客暑期多校训练营(第八场)E.Explorer

    链接:https://ac.nowcoder.com/acm/contest/888/E来源:牛客网 Gromah and LZR have entered the fifth level. Unli ...

随机推荐

  1. word粘贴图片到ekitor

    最近公司做项目需要实现一个功能,在网页富文本编辑器中实现粘贴Word图文的功能. 我们在网站中使用的Web编辑器比较多,都是根据用户需求来选择的.目前还没有固定哪一个编辑器 有时候用的是UEditor ...

  2. Java当中的IO流(上)

    Java当中的IO流 在Java中,字符串string可以用来操作文本数据内容,字符串缓冲区是什么呢?其实就是个容器,也是用来存储很多的数据类型的字符串,基本数据类型包装类的出现可以用来解决字符串和基 ...

  3. Python基础之算术运算符

    如下图所示, 假设变量a = 10, b = 20:

  4. jQuery文档操作之插入操作

    append() 语法 父元素.append(子元素) 解释:追加某元素,在父元素中添加新的子元素.子元素可以为:string/element(js对象)/jQuery元素 代码如下: var oli ...

  5. JVM GC之对象生死

    1.简述 在Java内存运行时区域的各个部分中,程序计数器.虚拟机栈.本地方法栈3个区域随着线程而生,随着线程而亡.栈中的栈帧随着方法的进入和退出而有条不紊的进行着入栈和出栈操作. 每个栈帧需要分配多 ...

  6. lamp 环境利用compser安装tp5

    1.安装compser,这个可以去百度命令 2.cd到根目录 3.composer create-project --prefer-dist topthink/think tp(tp可以随意命名) 4 ...

  7. VLC-Qt 入门指南

      关于 VLC-Qt VLC-Qt:一个结合了 Qt 应用程序和 libVLC 的免费开源库.它包含了用于媒体播放的核心类,以及用于更快速地进行媒体播放器开发的一些 GUI 类. 官网地址:http ...

  8. Instances cannot be resolved and nested lifetimes cannot be created from this LifetimeScope as it has already been disposed.

    2019-07-24 11:09:15.231+08:00 LISA.Common.Utilities.LogUtil - System.ObjectDisposedException: Instan ...

  9. linu逻辑分区动态调整大小

    注意: 这个动态调整的方法是有丢数据风险的,要确保调整的源分区没有使用或者使用率很低.源分区中如果有重要的文件最好先备份 在centos 6.5上操作过 lvdisplay 查看已有的分区的大小 lv ...

  10. Session技术入门代码案例

    package com.loaderman.demo; import javax.servlet.ServletException; import javax.servlet.http.*; impo ...