卡特兰数经典 \(\texttt{AB}\) 分拆问题。

分析:

题意相当于排列 \(n\) 个 \(\texttt A\) 和 \(n\) 个 \(\texttt B\),使得相邻 \(\texttt{AB}\)(有序!)消掉,然后左右元素并到一起再消,最后消完的序列个数。

设 \(\texttt{AB}\) 为一个组“1”,\(\texttt{AB}\) 自嵌套一次为一个组“2”(即 \(\texttt{AABB}\)),以此类推。

后面大多数数字指组“数字”

题意即转换为一个数 \(n\),求 \(n\) 分解成若干个正整数之和的方案数。

神犇到这一步就可以切掉了吧。

我们这里考虑隔板法:

两个 \(1\) 当然可以合并 \(2\)(\(=1+1\)),\(a\) 和 \(b\) 当然可以合并 \(a+b\),问题转换为有 \(n\) 个 \(1\) 有多少种合并方案。

设 \(n\) 个数的方案数为 \(f(n)\)。

考虑将 \(f(n)\) 分解为 \(f(x_0+y_0)\)。

使用隔板:

  • 当隔板在最左侧时,\(x_0=0\),\(f(0)=1\);\(y_0=n\),因为要求合并,所以有 \(n-1\) 种,由乘法原理知,此步答案为 \(f(0)f(n-1)\)。
  • 隔板向右移动一格,\(x_0=1\),也就是 \(f(1)\);\(y_0=n-1\),同理是 \(n-2\) 种,由乘法原理知,此步答案为 \(f(1)f(n-2)\)。
  • \(\dots\)
  • 归纳一下,第 \(i\) 步为 \(f(i)f(n-i-1)\)。
  • 最后一步显然是 \(f(n-1)f(0)\);左右对称。

于是得出递推式:

\[f(n)=f(0)f(n-1)+f(1)f(n-2)+f(2)f(n-3)+\dots+f(i)f(n-i-1)+\dots+f(n-1)f(0)
\]

朴素 dp 即可:

#include<iostream>
using namespace std;
const int N=25;
typedef long long ll;
ll n,dp[N];
int main()
{
cin>>n;
dp[0]=1;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
dp[i]+=dp[j-1]*dp[i-j];
cout<<dp[n];
return 0;
}

但是在深入一步,会发现 \(f(n)=f(0)f(n-1)+f(1)f(n-2)+f(2)f(n-3)+\dots+f(i)f(n-i-1)+\dots+f(n-1)f(0)\) 的这个 \(f(n)\) 正好就是卡特兰数 \(C_n\),这个公式正好是一个卡特兰数的递推式。

【洛谷P1754 球迷购票问题】题解的更多相关文章

  1. 洛谷 P1754 球迷购票问题

    P1754 球迷购票问题 题目背景 盛况空前的足球赛即将举行.球赛门票售票处排起了球迷购票长龙. 按售票处规定,每位购票者限购一张门票,且每张票售价为50元.在排成长龙的球迷中有N个人手持面值50元的 ...

  2. 洛谷——P1754 球迷购票问题

    题目背景 盛况空前的足球赛即将举行.球赛门票售票处排起了球迷购票长龙. 按售票处规定,每位购票者限购一张门票,且每张票售价为50元.在排成长龙的球迷中有N个人手持面值50元的钱币,另有N个人手持面值1 ...

  3. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

  4. 洛谷P4047 [JSOI2010]部落划分题解

    洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...

  5. 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)

    洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...

  6. 【洛谷】P1754 球迷购票问题(基础dp)

    题目背景 盛况空前的足球赛即将举行.球赛门票售票处排起了球迷购票长龙. 按售票处规定,每位购票者限购一张门票,且每张票售价为50元.在排成长龙的球迷中有N个人手持面值50元的钱币,另有N个人手持面值1 ...

  7. 洛谷10月月赛II题解

    [咻咻咻] (https://www.luogu.org/contestnew/show/11616) 令人窒息的洛谷月赛,即将参加NOIp的我竟然只会一道题(也可以说一道也不会),最终145的我只能 ...

  8. [洛谷P1823]音乐会的等待 题解(单调栈)

    [洛谷P1823]音乐会的等待 Description N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没 ...

  9. BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解

    +++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...

随机推荐

  1. 基于 range 的 for 循环和 auto

    基于 range 的 for 循环和 auto C++11 引入一种循环的新形式,叫基于 range 的 for 循环,它允许我们用更简单易读的形式遍历容器中的所有元素 vector<int&g ...

  2. pytorch入门--土堆深度学习快速入门教程

    工具函数 dir函数,让我们直到工具箱,以及工具箱中的分隔区有什么东西 help函数,让我们直到每个工具是如何使用的,工具的使用方法 示例:在pycharm的console环境,输入 import t ...

  3. EFCore常规操作生成的SQL语句一览

    前言 EFCore的性能先不说,便捷性绝对是.Net Core平台下的ORM中最好用的,主要血统还百分百纯正. EFCore说到底还是对数据库进行操作,无论你是写Lamda还是Linq最后总归都是要生 ...

  4. 2021.03.06【NOIP提高B组】模拟 总结

    T1 看起来十分复杂,打表后发现答案是 \(n*m\mod p\) 具体的证明... 原式的物理意义,就是从坐标原点(0,0),用每一种合法的斜率, 穿过坐标[1 ~ n , 1 ~ m]的方阵中的整 ...

  5. Linux Cgroup v1(中文翻译)(4):Block IO Controller

    Block IO Controller 1 概览 cgroup子系统blkio实现了block io控制器.无论是对存储结构上的叶子节点和还是中间节点,它对各种IO控制策略(proportional ...

  6. junit 5 - Display Name 展示名称

    本文地址:https://www.cnblogs.com/hchengmx/p/14883563.html @DisplayName可以给 测试类 或者 测试方法来自定义显示的名称.可以支持 空格.特 ...

  7. Centos 创建新的虚拟环境

    1. conda env list 查看目前已经存在的虚拟环境,注意新取的虚拟环境的名字不能和目前已存在的虚拟环境的名字相同! 2. conda create -n [环境名] [指定python版本 ...

  8. 1.3 操作系统的第三个功能——存储管理功能 -《zobolの操作系统学习札记》

    1.3 操作系统的第三个功能--存储管理功能 作者zobol:关于操作系统概论-存储管理功能,我给出下列问题: 目录 1.3 操作系统的第三个功能--存储管理功能 问1:操作系统的文件管理系统主要是负 ...

  9. Tensor的创建和维度的查看

    常见的Tensor创建方法 1,基础Tensor函数:torch.Tensor(2,2)32位浮点型 2,指定类型: torch.DoubleTensor(2,2)64位浮点型 3,使用python的 ...

  10. Vue回炉重造之封装防刷新考试倒计时组件

    <!-- 考试倒计时组件 --> <template> <div class="time"> <p>00:{{timerCount2 ...