当前位置: 首页 > news >正文

ch04 部分题目思路

G. 朋友配对

区间 dp

f ( i , j ) f(i,j) f(i,j) 表示第 i 个人到第 j 个人可以两两凑对的有序方案。

递归边界应该是对于任意 i ∈ [ 1 , n + 1 ] i \in [1,n+1] i[1,n+1] 有 $ f(i,i-1) = 1$。

考虑对于 f ( i , j ) f(i,j) f(i,j) 的计算,决策阶段应该是枚举 i i i k ∈ [ i + 1 , j ] k \in [i+1, j] k[i+1,j] 的哪个 k k k 配对

  • i 和 k i 和 k ik 配对,应有 ( i + 1 , k − 1 ) (i+1,k-1) (i+1,k1) 作为一个独立的区间和 ( k + 1 , j ) (k+1,j) (k+1,j) 作为一个独立的区间,分别都能配对;
  • 故有 f ( i , j ) = ∑ i < k < = j f ( i + 1 , k − 1 ) ∗ f ( k + 1 , j ) ∗ ( ( j − i + 1 ) / 2 ( k − i + 1 ) / 2 ) f(i,j) = \sum_{i<k<=j}f(i+1,k-1) * f(k+1,j) * \binom{(j-i+1)/2}{(k-i+1)/2} f(i,j)=i<k<=jf(i+1,k1)f(k+1,j)((ki+1)/2(ji+1)/2)
  • 最后面乘上的那个系数表示的是左右两部分是独立的,所以这两个的配对过程可以交错。
#include <bits/stdc++.h>
using namespace std;using ll = long long;
bool good[404][404];
ll C[202][202], f[404][404];int main() {int n, m;cin >> n >> m;for (int i = 0; i < m; ++i) {int a, b;cin >> a >> b;good[a][b] = true;}const int P = 998244353;for (int i = 0; i <= n; ++i) {C[i][0] = 1;for (int j = 1; j <= i; ++j) {C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % P;}}for (int i = 1; i <= n * 2 + 1; ++i) f[i][i - 1] = 1;for (int len = 2; len <= n * 2; len += 2) {for (int i = 1, j = i + len - 1; j <= n * 2; ++i, ++j) {for (int k = i + 1; k <= j; k += 2)if (good[i][k]) {f[i][j] += f[i + 1][k - 1] * f[k + 1][j] % P * C[(j - i + 1) / 2][(k - i + 1) / 2] % P;}f[i][j] %= P;}}cout << f[1][n * 2] << endl;return 0;
}
http://www.dtcms.com/a/268941.html

相关文章:

  • Logseq 插件开发实战四:发布到官方插件市场
  • 【VSCode 插件离线安装包下载方法分享】
  • 【PyTorch】PyTorch中torch.nn模块的循环层
  • Microsoft Visual Studio离线安装(以2022/2019为例)
  • Python脚本保护工具库之pyarmor使用详解
  • Redis常用数据结构以及多并发场景下的使用分析:list类型
  • Qt的第一个程序(2)
  • Karmada Multi-Ingress(MCI)技术实践
  • verilog中timescale指令的使用
  • javaweb———html
  • 【taro react】 ---- RuiVerifySlider 行为验证码之滑动拼图使用【天爱验证码 tianai-captcha 】实现
  • android ui thread和render thread
  • 上海新华医院奉贤院区:以元宇宙技术重构未来医疗生态
  • RAG 之 Prompt 动态选择的三种方式
  • 华为OD机试 2025B卷 - 小明减肥(C++PythonJAVAJSC语言)
  • 编辑器Vim的快速入门
  • Session的工作机制及安全性分析
  • Qt(信号槽机制)
  • 解数独(C++版本)
  • 永磁同步电机PMSM的无传感器位置控制
  • dotnet publish 发布后的项目,例如asp.net core mvc项目如何在ubuntu中运行,并可外部访问
  • 自动化运维:使用Ansible简化日常任务
  • Word 怎么让字变大、变粗、换颜色?
  • 运维打铁: PostgreSQL 数据库性能优化与高可用方案
  • Flutter 入门
  • 能源管理综合平台——分布式能源项目一站式监控
  • 海岛分布式能源系统调度 粒子群算法优化
  • 基于拉普拉斯变换与分离变量法的热传导方程求解
  • 网安系列【10】之深入浅出CSRF攻击:从原理到实战(DVWA靶场演示)
  • 商城小程序的UI设计都有哪些风格