首页 > 其他分享 >abc217 F - Make Pair

abc217 F - Make Pair

时间:2023-01-23 14:23:08浏览次数:69  
标签:abc217 int Make len Pair return sum

题意:

\(2n\) 个人从小到大标号排成一行,有 \(m\) 对关系 \(<x,y>\)。每次可删除相邻且有关系的两人,并移动旁边的位置使队伍恢复紧凑

问把所有人删完的方案数

\(n\le 200\)

思路:

哇,一眼区间 dp + 组合数!\(f(l,r)=\sum C_{len(l,r)/2}^{len(l,k)/2}f(l,k)*f(k+1,r)\),其中 \(len(l,r)=r-l+1\)

然后重复计数,WA 了:https://atcoder.jp/contests/abc217/submissions/38271547

正解:枚举 \(l\) 与 \((l,r]\) 中的某位置 \(k\) 有联系:\(f(l,r)=\sum C_{len(l,r)/2}^{len(l,k)/2}f(l+1,k-1)*f(k+1,r)\)

const int N = 405, P = 998244353;
int n, m; bool g[N][N];
ll f[N][N], C[N][N];
ll dp(int l, int r) {
    if(~f[l][r]) return f[l][r];
    if(l + 1 == r) return f[l][r] = g[l][r];
    if(l > r) return f[l][r] = 1;
    
    f[l][r] = 0;
    for(int k = l + 1; k <= r; k += 2)
        if(g[l][k]) f[l][r] += dp(l + 1, k - 1) * dp(k + 1, r) % P
                            * C[(r - l + 1) / 2][(k - l + 1) / 2] % P;
    return f[l][r] %= P;
}
void sol() {
    cin >> n >> m; n *= 2;
    while(m--) {
        int x, y; cin >> x >> y;
        g[x][y] = 1;
    }
    
    init(); //预处理组合数
    memset(f, -1, sizeof f);
    cout << dp(1, n);
}

标签:abc217,int,Make,len,Pair,return,sum
From: https://www.cnblogs.com/wushansinger/p/17065151.html

相关文章

  • makefile是什么,它是如何工作的?
    概述当某些文件发生改变时想要执行一个执行一个任务时,make可以排上用场。Make需要一个文件名为makefile或MakeFile的文件来定义一系列将要运行的任务集。你可以使用make来......
  • Makefile 和 CMake
    Makefilehttps://makefiletutorial.com/make精髓  1,如果target存在,将不会执行;反之,则执行2,如果依赖改变,即使target存在也会重新执行makeclean注意clean不是ma......
  • 【题解】P4755 Beautiful Pair
    麻了,这么多典题没做过……思路分治/笛卡尔树。这一类和区间最值相关的区间端点对计数应该都可以用这种做法做。由于求的是最大值,不妨从大到小考虑每个\(a_i\)的贡......
  • 【记那些年我们链不明白的青春】Cmake常用函数一文总结
    前言以一个简短且好理解的方式记录一下常用Cmake的函数,区别于网上的那些抄来抄去。废话少,全精华。link_directorieslink_directories(${PROJECT_SOURCES_DIR}/lib)是......
  • CMake 快速入门教程 All In One
    CMake快速入门教程AllInOneCMakeCMakeisanopen-source,cross-platformfamilyoftoolsdesignedtobuild,testandpackagesoftware.CMakeisusedtocont......
  • VScode和cmake的组合拳
    cmake的基本使用1.cmake的常用指令cmake是一个跨平台的安装编译软件,可以用简单的语法规则描述所有平台的安装编译过程,下面介绍cmake的常用指令cmake_minimum_requir......
  • 准备学习 make
    make-h用法:make[选项][目标]...选项:-b,-m为兼容性而忽略。-B,--always-make无条件制作(make)所有目标。-C目录,--direc......
  • [LeetCode] 1814. Count Nice Pairs in an Array
    Youaregivenanarray nums thatconsistsofnon-negativeintegers.Letusdefine rev(x) asthereverseofthenon-negativeinteger x.Forexample, rev(1......
  • https://github.com/Abraham423/CenterPointTensorRT 的cmake
    ​​link​​cmake_minimum_required(VERSION2.8.3)project(centerpoint)set(USE_CUDATrue)#ForTensorRTsamplelib#set(TRT_ROOT/home/wanghao/Desktop/projects/T......
  • FreeMaker入门介绍
    一、FreeMaker介绍FreeMarker是一款免费的Java模板引擎,是一种基于模板和数据生成文本(HMLT、电子邮件、配置文件、源代码等)的工具,它不是面向最终用户的,而是一款程序员使用......