牛客多校第五场 G subsequence 1 最长公共子序列/组合数
题意:
给定两个由数字组成的序列s,t,找出s所有数值大于t的子序列。注意不是字典序大。
题解:
首先特判s比t短或一样长的情况。
当s比t长时,直接用组合数计算s不以0开头的,长度大于t的所有子序列数量。
然后再去看s的和t一样长的子序列。
就是在找s和t的公共子序列,并且一旦某一位s比t大了,就不找了,直接用组合数求此种情况下后面的组合方式,一旦某一位s比t小了,也不找了,直接返回0.
组合数要预处理。
#include<iostream>
#include<cstring>
#define MOD 998244353
#define LL long long
using namespace std;
char str1[],str2[];
LL Cmn[][];
LL dp[][];
int qpow(int base,int n){
int ans=;
while(n){
if(n%){
ans=1LL*ans*base%MOD;
}
base=1LL*base*base%MOD;
n>>=;
}
return ans;
}
//void makerev(){
// for(int i=1;i<=3000;i++){
// rev[i]=qpow(i,MOD-2);
// }
// return ;
//}
void MakeCmn(){
memset(Cmn,,sizeof Cmn);
Cmn[][]=;
for(int n=;n<=;n++){
Cmn[n][]=;
for(int m=;m<=n;m++){
Cmn[n][m]=Cmn[n-][m-]+Cmn[n-][m];
Cmn[n][m]%=MOD;
}
}
// for(int i=1;i<=3000;i++){
// for(int j=1;j<=i;j++){
// printf("从%d里取%d个的方案是%d\n",i,j,Cmn[i][j]);
// }
// }
}
int l1,l2;
int main(){
// makerev();
MakeCmn();
int t;
scanf("%d",&t);
while(t--){
scanf("%d %d",&l1,&l2);
scanf("%s %s",str1,str2);
if(l1<l2){
printf("0\n");
continue;
}else if(l1==l2){
for(int i=;i<l1;i++){
if(str1[i]>str2[i])goto B;
if(str1[i]<str2[i]){
printf("0\n");
goto A;
}
}
printf("0\n");
continue;
B:;printf("1\n");
A:;continue;
}
//第一个串比第二个长的情况
LL ans=;
for(int i=l2+;i<=l1;i++){
ans+=Cmn[l1][i];
ans%=MOD;
for(int j=;j<l1;j++){
if(str1[j]==''){
ans-=Cmn[l1--j][i-];
ans+=MOD;
ans%=MOD;
}
}
}
// printf(">:%d\n",ans);
dp[][] = ;
for (int i = ; i <= l1; i++) {
dp[i][] = ;
for (int j = ; j <= min(l2, i); j++) {
dp[i][j] = dp[i-][j];
if (str1[i-] == str2[j-]) {
dp[i][j] = (0LL+dp[i][j] + dp[i-][j-]) % MOD;
} else if (str1[i-] > str2[j-]) {
ans = (0LL+ans + dp[i-][j-]*Cmn[l1-i][l2-j]) % MOD;
}
}
} printf("%d\n",ans);
}
return ;
}
这道题带来的教训:能用dp,不要用dfs,尤其是当两者思维难度差不太多的时候。
牛客多校第五场 G subsequence 1 最长公共子序列/组合数的更多相关文章
- 2019牛客多校第五场 G subsequence 1 dp+组合数学
subsequence 1 题意 给出两个数字串s,t,求s的子序列中在数值上大于t串的数量 分析 数字大于另一个数字,要么位数多,要么位数相同,字典序大,位数多可以很方便地用组合数学来解决,所以只剩 ...
- 字符串dp——牛客多校第五场G
比赛的时候脑瘫了没想出来..打多校以来最自闭的一场 显然从s中选择大于m个数组成的数必然比t大,所以只要dp求出从s中选择m个数大于t的方案数 官方题解是反着往前推,想了下反着推的确简单,因为高位的数 ...
- 牛客多校第五场G
subsequence 1 只要处理长度等于t的. 转移方程没想出来QAQ $dp(i,j,0)$代表到$s[i]$为止有多少个前缀序列与$t[0\cdots j]$相同 所以有$dp(i,j,0)= ...
- 2019牛客多校第五场H - subsequence 2 拓扑
H - subsequence 2 题意 要你使用前\(m\)个小写字母构造一个长度为\(n\)的字符串 有\(m*(m-1)/2\)个限制条件: \(c_{1} .c_{2}. len\):表示除去 ...
- 牛客多校第五场 H subsequence 2 拓扑排序
题意: 给你长度最长为1000的字符串,这个字符串中最多有10种字母,每次给你两种字母,输出这两种字母在字符串中的相对位置,问你这个字符串原本是什么样子,如果不存在则输出-1 题解: 把整个字符串看作 ...
- 牛客多校第三场 G Removing Stones(分治+线段树)
牛客多校第三场 G Removing Stones(分治+线段树) 题意: 给你n个数,问你有多少个长度不小于2的连续子序列,使得其中最大元素不大于所有元素和的一半 题解: 分治+线段树 线段树维护最 ...
- 牛客多校第四场 G Maximum Mode
链接:https://www.nowcoder.com/acm/contest/142/G来源:牛客网 The mode of an integer sequence is the value tha ...
- 牛客多校第五场 F take
链接:https://www.nowcoder.com/acm/contest/143/F来源:牛客网 题目描述 Kanade has n boxes , the i-th box has p[i] ...
- 牛客多校第五场 J:Plan
链接:https://www.nowcoder.com/acm/contest/143/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
随机推荐
- 2019-4-12-WPF-类型的构造函数执行符合指定的绑定约束的调用时引发了异常
title author date CreateTime categories WPF 类型的构造函数执行符合指定的绑定约束的调用时引发了异常 lindexi 2019-04-12 08:52:35 ...
- 2018-2-13-win10-uwp-iot
title author date CreateTime categories win10 uwp iot lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:2 ...
- ubuntu QT安装以及配置交叉编译环境
我的环境:ubuntu14.04 64位 1.下载Qt: 上网搜索 qt-opensource-linux-x64-5.3.0.run下载有好多百度云盘 要么在官网下载追新版本http://down ...
- drop,delete与truncate的区别
drop直接删掉表 truncate删除表中数据,再插入时自增长id又从1开始 delete删除表中数据,可以加where字句. (1) DELETE语句执行删除的过程是每次从表中删除一行,并且同时将 ...
- Tools: python 安装
python 安装 python pip解压,cmd进入目录,python setup.py install 环境变量:PATHD:\Python\Python37\Scripts\;D:\Pytho ...
- jq-demo-点击改变图片
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- ps切图的基本操作
参考线和辅助线 ctrl+r呼出标尺,只有在移动工具(快捷键v)下,鼠标左键从标尺上可以拖出来新的参考线.将参考线拖回标尺即是删除. 导出切片 快捷键ctrl+alt+shift+s ,选择png-2 ...
- java-----Long转换为 int , string
int: 1.调用intValue()方法 long ll = 300000; int ii= new Long(ll).intValue(); 2.先把long转换成字符串String,然后在转行成 ...
- Android Activity XML配置
<activity android:name="xxxActivity" android:configChanges="keyboard|keyboardHidde ...
- NX二次开发-UFUN关闭本地文本文档uc4540
1 NX9+VS2012 2 3 #include <uf.h> 4 #include <uf_cfi.h> 5 #include <uf_ui.h> 6 7 us ...