AtCoder Beginner Contest 217 F - Make Pair (区间dp)

简介: AtCoder Beginner Contest 217 F - Make Pair (区间dp)

linkkkkk

题意:

有2 ∗ n个数,给出m对关系( a , b )表示a-b有联系。每次将这些数排成一排,如果相邻两个数有联系的话就可以消去,求方案数。

思路:

d p [ l ] [ r ]表示将[ l , r ]之间的数消去的方案数。

枚举中间点k的时候,假设k − r有联系,那么区间就可以分为[ l , k − 1 ] , [ k + 1 , r − 1 ]两段,贡献是

dp[l][k1]dp[k+1][r1]C2rl+12kl

如果两个数之间的数的个数是奇数的话,这两个数之间有联系也是对答案没有影响的;同理枚举k kk的时候也要保证分出来的两段区间是偶数个数。

代码:

ll n,m,dp[2100][2100];
bool vis[2100][2100];
vector<int>g[1100];
ll c[2100][2100];
void init(){
  for(int i=0;i<2100;i++)
    for(int j=0;j<=i;j++){
      if(j==0) c[i][j]=1;
      else c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
    }
}
int main() {
  init();
    n=read,m=read;
    rep(i,1,m){
      int u=read,v=read;
      if((v-u-1)%2) continue;
      vis[u][v]=1;
      if(abs(u-v)==1){
        dp[u][v]=dp[v][u]=1;
      }
    }
    for(int len=2;len<=2*n;len+=2){
      for(int l=1;l+len-1<=2*n;l++){
        int r=l+len-1;
        if(vis[l][r]) dp[l][r]=dp[l+1][r-1];
        for(int k=l+2;k<r;k+=2)
          if(vis[k][r]){
            dp[l][r]=(dp[l][r]+dp[l][k-1]*dp[k+1][r-1]%mod*c[(r-l+1)/2][(k-l)/2]%mod)%mod;
          }
        //cout<<dp[l][r]<<endl;
      }
    }
    printf("%lld\n",dp[1][2*n]);
    return 0;
}
目录
相关文章
|
JavaScript 前端开发 API
【前端开发】JS同步与异步调用,Vue2基础知识
本文简要介绍了JavaScript中的同步与异步调用以及Vue2的基础知识。 ### JS同步与异步调用 - **同步调用**:代码按顺序执行,每个任务完成后才执行下一个。 - **异步调用**:允许代码并发执行,不必等待前一个任务完成。 - **回调函数**:传统异步模式,如`setTimeout`。 - **Promise**:解决回调地狱问题,链式调用 `.then()`。 - **async/await**:基于Promise,使异步代码看起来像同步代码。 ### Vue2基础知识 - **核心概念**:指令、实例、组件、模板、数据绑定和生命周期钩子。 - **指令**
769 5
|
SQL 存储 关系型数据库
COALESCE 函数:SQL中的空值处理利器
【8月更文挑战第31天】
8031 0
|
存储 人工智能 自然语言处理
第2章 MATLAB基础知识——2.2 基本矩阵操作(2)
第2章 MATLAB基础知识——2.2 基本矩阵操作(2)
|
JSON JavaScript 数据格式
|
存储 消息中间件 安全
老板:公司系统太多,能不能实现账号互通?(一)
最近开发新产品,然后老板说我们现在系统太多了,每次切换系统登录太麻烦了,能不能做个优化,同一账号互通掉。作为一个资深架构狮,老板的要求肯定要满足,安排!
老板:公司系统太多,能不能实现账号互通?(一)
|
Java 数据库连接 mybatis
【Java8 新特性 2,mybatis面试题2019
【Java8 新特性 2,mybatis面试题2019
【Java8 新特性 2,mybatis面试题2019
|
安全 算法 网络安全
SHASHA-1,SHA-2哈希算法之间的差异
今天要为大家介绍的是哈希算法,在介绍SHA之前,只有了解什么是SHA,我们才清楚SSL证书如何使用哈希来形成数字签名。那么什么是哈希呢? HASH算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。
2538 0
|
13天前
|
人工智能 JavaScript Ubuntu
5分钟上手龙虾AI!OpenClaw部署(阿里云+本地)+ 免费多模型配置保姆级教程(MiniMax、Claude、阿里云百炼)
OpenClaw(昵称“龙虾AI”)作为2026年热门的开源个人AI助手,由PSPDFKit创始人Peter Steinberger开发,核心优势在于“真正执行任务”——不仅能聊天互动,还能自动处理邮件、管理日程、订机票、写代码等,且所有数据本地处理,隐私完全可控。它支持接入MiniMax、Claude、GPT等多类大模型,兼容微信、Telegram、飞书等主流聊天工具,搭配100+可扩展技能,成为兼顾实用性与隐私性的AI工具首选。
19980 110

热门文章

最新文章