2019 牛客暑期多校 G subsequence 1 (dp+组合数)
题目:https://ac.nowcoder.com/acm/contest/885/G
题意:给你两个串,要求上面哪个串的子序列的值大于下面这个串的值的序列个数,不含前导零
思路:我们很容易就可以看出选择上面的那个的字符串的子序列时如果长度超过下面这个一定可以选用,同理长度短于的肯定不能用,长度大的部分我们可以用组合数来进行求解
所以难点就在于我们要求序列长度等于的时候有多少个序列满足要求,因为种数太多我们可以想到应该要用dp来优化复杂度,想一下,如果当前某一位低于了,那么这个串就肯定比他小了
所以我们要计算两种状态,到当前位置依然相等的个数 0 ,当前已经大于的序列个数 1
dp[i][j][k]
当前第一个串的第i位匹配第二个串的第j位第k种状态时有多少个序列
最后dp[n-1][m-1][1]就是长度相等时的答案
当然这里需要降维,把第一维去掉,我们就可以采用01背包那种做法,把第二种循环遍历顺序取反即可
最后我们还要判断以0开头的情况,这样是不合法的,但是我组合数时计算了值,所以我们最后还要去掉
#include<bits/stdc++.h>
#define maxn 3005
#define mod 998244353
using namespace std;
typedef long long ll;
ll dp[maxn][];
ll c[maxn][maxn];
int n,m;
char s1[maxn],s2[maxn];
ll fact[maxn],ifact[maxn];
ll p(ll a,ll b){
if(a+b>=mod){
return a+b-mod;
}
else return a+b;
}
int main(){
int t;
scanf("%d",&t);
c[][]=c[][]=;
for(int i=;i<maxn;i++){
c[i][]=;
for(int j=;j<=i;j++)
c[i][j]=p(c[i-][j],c[i-][j-]);
}
while(t--){
memset(dp,,sizeof(dp));
scanf("%d%d",&n,&m);
scanf("%s%s",s1,s2);
for(int i=;i<n;i++){//计算相等情况
if(i!=)
{
for(int j=min(i,m-);j>=;j--){
if(s1[i]==s2[j]){
dp[j][]=p(dp[j][],dp[j-][]);
dp[j][]=p(dp[j][],dp[j-][]);
}
else if(s1[i]>s2[j]){
dp[j][]=p(dp[j][],dp[j-][]);
dp[j][]=p(dp[j][],+dp[j-][]); }
else{
dp[j][]=p(dp[j][],dp[j-][]);
}
}
}
if(s1[i]==s2[]) dp[][]++;
else if(s1[i]>s2[]) dp[][]++;
}
ll sum=dp[m-][];
// printf("%lld\n",sum);
for(int i=m+;i<=n;i++){//计算大于长度的时候
sum=p(sum,c[n][i]);
}
for(int i=;i<n;i++){//去掉以0开头
if(s1[i]==''){
ll len=n-i-;
for(int j=m;j<=n&&j<=len;j++){
sum=p(sum-c[len][j],mod);
}
}
}
printf("%lld\n",p(sum,mod));
}
}
2019 牛客暑期多校 G subsequence 1 (dp+组合数)的更多相关文章
- 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)
layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...
- 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9: 对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可. 后者mod=1e9,5才 ...
- 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牛客暑期多校训练营(第八场)E.Explorer
链接:https://ac.nowcoder.com/acm/contest/888/E来源:牛客网 Gromah and LZR have entered the fifth level. Unli ...
- 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...
- 2019牛客暑期多校第五场题解ABGH
A.digits 2 传送门 题意:给你一个n,要求输出一个每一位数字之和能整除n且其本身也能整除n的数.n不超过100,要求的数不超过10000位数. 题解:直接将n输出n次. 代码: #inclu ...
随机推荐
- 数字滚动动画效果 vue组件化
参考了这篇文章,作者思路很清晰,简单做了下修改,蟹蟹作者,链接在此:https://www.jb51.net/css/685357.html#comments 主要思路是利用css属性writing- ...
- 使用C#登录带验证码的网站
我在上一篇文章中已经讲解了一般网站的登录原来和C#的登录实现,很多人问到对于使用了验证码的网站该怎么办,这里我就讲讲验证码的原理和对应的登录方法.验证码的由来几年前,大部分网站.论坛之类的是没有验证码 ...
- HDU 3183 A Magic Lamp(RMQ问题, ST算法)
原题目 A Magic Lamp Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- ASP.NET MVC学习系列(二)-WebAPI请求 转载https://www.cnblogs.com/babycool/p/3922738.html
继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现 ...
- JS 获取json key和value
var json= { "Type": "Coding", "Height":100 }; for (var key in json) { ...
- shell cp拷贝的用法
个人觉得这个记录的比较全 自己查阅: cp [options] <source file or directory> <target file or directory> 或 ...
- docker 提示 Drive has not been shared 错误
Creating laradock_docker-in-docker_1 ... Creating laradock_docker-in-docker_1 ... error ERROR: for l ...
- C++中的类型转换函数
1,转换构造函数可以将普通的基础类型转换为当前的类类型,也有能力将其它类类 型的对象转换为当前的类类型: 2,问题: 1,类类型是否能够类型转换到普通类型? 1,可以的: 3,类型转换函数: 1,C+ ...
- npm安装报错:Error: EACCES: permission denied
报错如下: sudo npm i webpack -g /Users/xesfe/.npm-global/bin/webpack -> /Users/xesfe/.npm-global/lib/ ...
- 在Ubuntu custom kernel上裝perf by compile
Using perf, the Linux Performance Analysis tool on Ubuntu Karmic A lot has been going on with Linux ...