2019牛客暑期多校训练营(第一场)-E(DP)
题目链接: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代码:
#include<cstdio>
using namespace std; const int MOD=1e9+;
const int maxn=;
int dp[maxn<<][maxn<<];
int n,m; int main(){
while(~scanf("%d%d",&n,&m)){
for(int i=;i<=n+m;++i)
for(int j=;j<=n+m;++j)
dp[i][j]=;
dp[][]=;
for(int i=;i<=n+m;++i)
for(int j=;j<=n+m;++j){
if(j>=i+-n)
dp[i+][j]=(dp[i+][j]+dp[i][j])%MOD;
if(i>=j+-m)
dp[i][j+]=(dp[i][j+]+dp[i][j])%MOD;
}
printf("%d\n",dp[n+m][n+m]);
}
return ;
}
2019牛客暑期多校训练营(第一场)-E(DP)的更多相关文章
- 2019牛客暑期多校训练营(第二场) H-Second Large Rectangle(单调栈)
题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 ...
- 2019牛客暑期多校训练营(第九场) D Knapsack Cryptosystem
题目 题意: 给你n(最大36)个数,让你从这n个数里面找出来一些数,使这些数的和等于s(题目输入),用到的数输出1,没有用到的数输出0 例如:3 4 2 3 4 输出:0 0 1 题解: 认真想一 ...
- 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)
layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...
- 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...
- 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
- 2019牛客暑期多校训练营(第一场) B Integration (数学)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- 2019牛客暑期多校训练营(第二场)F.Partition problem
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...
- 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9: 对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可. 后者mod=1e9,5才 ...
- 2019牛客暑期多校训练营(第八场)E.Explorer
链接:https://ac.nowcoder.com/acm/contest/888/E来源:牛客网 Gromah and LZR have entered the fifth level. Unli ...
随机推荐
- 用go iris 写的一个网页版文件共享应用(webapp)
主要演示文件拖拽上传或点击上传到不同的目录中,提供下载和删除功能. 目录结构: -main.go --share(用于分类存放上传文件的目录) --v(视图目录) ---share.html main ...
- Java进阶知识01 Struts2下的 jquery+ajax+struts 技术实现异步刷新功能
1.效果图示 横线上方的部分不动(没有刷新),下方实现刷新(异步刷新) 2.实现步骤 jquery+ajax+struts技术实现异步刷新功能的步骤: 1.需要用到 jquery+ajax+st ...
- TTTTTTTTTTTTTT CF 95 B 构造4,7幸运数字 贪心 构造 string
B. Lucky Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- Liblinear Visual studio 2013 Error C3057
使用LibLinear时编译时出现Error C3057的错误: OpenMP报错,查询MSDN: #pragma omp threadprivate(var)//var在编译之前必须是确定值 所以修 ...
- 1.Linux常用命令大全
系统信息 arch 显示机器的处理器架构uname -m 显示机器的处理器架构uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) h ...
- 异常处理(Exception Handling)
java里的异常处理(Exception)Exception 是在程序执行过程中发生的一些不希望发生的事情,这些事情如果不被好好处理,就会导致奇怪的结果或者是程序终结.Exception Handle ...
- Nodepad++中将Tab键替换为空格
Nodepad++是一个非常优秀的文本编辑工具,本人经常使用其编辑shell脚本,如果不进行设置,Tab键和空格混用,脚本上传到linux后,格式错乱,不容易查看. 设置方式 菜单栏选择"设 ...
- Android热修复技术原理详解
阿里Dexposed -- native解决方案 原理: 直接在native层进行方法的结构体信息对换,从而实现完美的方法新旧替换,从而实现热修复功能 他的思想完全来源于Xposed框架,完美诠释 ...
- Android SDK更新后Eclipse无法正常工作问题
一,问题描述 更新完Android SDK后,如果你的ADT版本低于其设定的最新版本,你更新完后立马会报错 这个时候你的项目出现各种红线,反正看着让人很不爽 二,原因 每次你更新完SDK后,Andro ...
- 解决oracle 物化视图刷新失败
oracle 物化视图刷新失败可能原因: 1.视图未建立物化视图日志 2.基表为授权给用户 1.物化视图语法 create materialized view [view_name] refresh ...