2019牛客暑期多校训练营(第五场)G-subsequence 1
题意:给你两个数字字符串s,t,求字符串s的子序列比字符串t大的个数
思路:他的题解上写的就是dp的基础练习题,好像的确是这么回事,既然是dp,那么对于定义的状态不同得到的转移方程就不同,写法自然就不一样。这里给出其中一种dp的解法
首先从 s 串中选的数字长度大于 t 串长度,肯定ok,那么我们枚举第一个数字的位置并且用组合数搞一搞就可以了,接下来我们用dp搞定长度与 t 串相等且大于 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]; //等于的话就等于加上与不加上相加
 
- if(s[i] < t[j]) dp[i][j] = dp[i - 1][j]; //小于的话就不用算进去了,长度相等时一定会小于,同时可以排除前导零
 
- if(s[i] > s[j]) ans+=dp[i - 1][j - 1] * C[n - i][m - j]. //前面匹配j-1的种类数*后面随便选len2-j个,大于后长度相等时一定大于
 
最后注意计算长度大于t的字符串数量排除前导零就可以了
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 998244353;
const int maxn = 3010; int n, m;
ll f[maxn][maxn], dp[maxn][maxn];
char s[maxn], t[maxn];
void pre()
{
f[1][1] = f[1][0] = f[0][0] = 1;
for (int i = 2; i <= 3000; i++){
f[i][0] = 1;
for (int j = 1; j <= i; j++) f[i][j] = (f[i-1][j-1]+f[i-1][j])%mod;
}
} int main()
{
pre();
int T;
scanf("%d", &T);
while(T--) {
scanf("%d %d", &n, &m);
scanf("%s %s", s + 1, t + 1);
for(int i = 0; i <= n; i++)
dp[i][0] = 1; ll ans = 0;
//选择当前位数等于t的序列
for(int i = 1; i <= n; i++)
for(int j = 1; j <= min(m, i); j++) {
dp[i][j] = dp[i-1][j]; //s[i]<t[j]的情况
if(s[i]==t[j]) dp[i][j] = (dp[i][j] + dp[i-1][j-1])%mod;
if(s[i]>t[j]) ans = (ans + dp[i-1][j-1]*f[n-i][m-j])%mod;
}
//选择当前位数大于t的序列
for(int i = 1; i <= n; i++) {
if(s[i] == '0') continue;
for(int j = m; j <= n-i; j++)
ans = (ans + f[n-i][j]) % mod; //i是枚举第一个数,j是枚举后面取几个
}
printf("%lld\n", ans);
}
return 0;
}
2019牛客暑期多校训练营(第五场)G-subsequence 1的更多相关文章
- 2019牛客暑期多校训练营(第五场) maximum clique 1
		
题意:给出n个不相同的数,问选出尽量多的数且任两个数字二进制下不同位数大于等于2. 解法:能想到大于等于2反向思考的话,不难发现这是一个二分图,那么根据原图的最大团等于补图的最大独立点集,此问题就变成 ...
 - 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牛客暑期多校训练营(第一场)A	Equivalent Prefixes(单调栈/二分+分治)
		
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...
 - [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem
		
链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
 - 2019牛客暑期多校训练营(第二场)J-Subarray(思维)
		
>传送门< 前言 这题我前前后后看了三遍,每次都是把网上相关的博客和通过代码认真看了再思考,然并卵,最后终于第三遍也就是现在终于看懂了,其实懂了之后发现其实没有那么难,但是的的确确需要思维 ...
 - 2019牛客暑期多校训练营(第一场)-A (单调栈)
		
题目链接:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个长度均为n的数组a和b,求最大的p使得(a1,ap)和(b1,bp)等价,等价的定义为其任意 ...
 
随机推荐
- springboot集成轻量级权限认证框架sa-token
			
sa-token是什么? sa-token是一个JavaWeb轻量级权限认证框架,主要解决项目中登录认证.权限认证.Session会话等一系列由此衍生的权限相关业务.相比于其他安全性框架较容易上手. ...
 - 【Spring】Spring 事务控制
			
Spring 事务控制 Spring 事务控制介绍 JavaEE 体系进行分层开发,事务控制位于业务层,Spring 提供了分层设计业务层的事务处理解决方案. Spring 的事务控制都是基于 AOP ...
 - (十五)xml模块
			
xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要 ...
 - show engine  innodb status
			
TRANSACTIONS------------Trx id counter 2003909(当前事务号)Purge done for trx's n:o < 2003905 (清理线程完成到了 ...
 - 转 Jmeter测试实践:文件下载接口
			
Jmeter测试实践:文件下载接口 一 Jmeter步骤 1.打开jmeter4.0,新建测试计划,添加线程组.根据实际情况配置线程属性. 2.添加HTTP请求.根据接口文档进行配置. Basic ...
 - TekRADIUS5.5安装教程
			
1.下载地址:https://www.kaplansoft.com/TekRADIUS/release/tekradius.zip 2.解压安装,双击一步默认安装下来就是了 3.配置连接数据库: 4. ...
 - charles安装使用乱码连手机等问题解决方案
			
捣鼓半天终于安装好了,给大家分享下我的过程 1.安装, 正常网上安装即可,我安装了个有汉化包的,,推荐链接 安装方法下载破解版,安装即可 安装包地址:https://pan.baidu.com/s/1 ...
 - git 分支合并时如何忽略某个文件
			
[转]git 分支合并时如何忽略某个文件 - 神奇的旋风 - 博客园 https://www.cnblogs.com/xuan52rock/p/13268872.html Git - git-merg ...
 - 架构风格 vs. 架构模式 vs. 设计模式(译)
			
4.架构风格 vs. 架构模式 vs. 设计模式(译) - 简书 https://www.jianshu.com/p/d8dce27f279f
 - autoreload  线程 进程管理 并发的处理方法
			
Django autoreload https://github.com/django/django/blob/9386586f31b8a0bccf59a1bff647cd829d4e79aa/dj ...