啊啊啊!这是一个经典题,我竟然发现了一个宝藏题解,那个大佬实在太太太牛逼了!
题目链接
这是我看的一种方法
递归
#include <algorithm>
#include <iostream>
#include <cstring>
#define xx first
#define yy second
#define ll long long
#define L(i, j, k) for (int i = j; i <= k; i ++)
#define R(i, j, k) for (int i = j; i >= k; i --)
using namespace std;
const int N = 20;
ll f[N][N];//i表示队列里面还有i个数 j表示有j个数在栈里
ll dfs(int i, int j)
{
if (f[i][j]) return f[i][j];
if (i == 0) return 1;
else if (j > 0){
f[i][j] += dfs(i, j - 1);
}
f[i][j] += dfs(i - 1, j + 1);
return f[i][j];
}
int main()
{
int n;
cin >> n;
cout << dfs(n, 0) << endl;
return 0;
}
大佬博客
orz我直接跪了