洛谷 P1044 栈

匿名 (未验证) 提交于 2019-12-02 23:47:01
  • 这是一道卡特兰数
  • 具体推导过程:
  • 设dp[i]为有i个数时的方案数。设x为最后出栈的一个元素,则已经出栈的元素中比x大的元素个数为n-x个,比x小的元素个数为x-1个。那么每部分的方案数分别为dp[n - x]、dp[x - 1]。因为它们两部分互相影响,是一个乘法原理。那么当i=n时,dp[n] = ?因为x可以在1到n中取值,所以总的方案数dp[n] = dp[0] * dp[n - 1] + dp[1] * dp[n - 2] + ... + dp[n - 1] * dp[0]
#include <iostream> #include <cstdio> using namespace std;  int n; int f[20];  int main() {     cin >> n;     f[0] = f[1] = 1;     for(int i = 2; i <= n; i++)         for(int j = 0; j < i; j++)             f[i] += f[j] * f[i - j - 1];     cout << f[n];     return 0; }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!