CF1924D Balanced Subsequences
题意简述
有
分析
可能需要的前置知识:
如何求一个字符串的最长合法括号子序列?
维护一个括号栈,若遇到左括号则直接压入栈,若遇到右括号则取出栈顶左括号匹配(此时最长合法括号子序列长度 +2),若没有,则该右括号失配。
下面进入正题。
首先,长度为
首先判掉
首先肯定是废物右括号在前,废物左括号在后,否则这一对废物括号会扩充合法括号子序列的长度。
将括号序列抽象成折线,初始位置在
而我们会有
而最终我们要达到坐标
题意转化为求一条
发现,到达并不能越过 这个限制实在是太紧了。考虑类似将
考虑怎么求
所以最终答案为
代码仅展示关键部分。
点击查看代码
int n,m,k;
int C[maxn][maxn];
void init(int lim){
C[0][0]=1;
rep(i,1,lim){
C[i][0]=1;
rep(j,1,i)C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;
}
}
void solve_the_problem(){
n=rd(),m=rd(),k=rd();
if(k>m||k>n)return (void)puts("0");
write((C[n+m][k]-C[n+m][k-1]+mod)%mod,10);
}
/*
*/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下