P1044 [NOIP2003 普及组] 栈

// Problem: P1044 [NOIP2003 普及组] 栈
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1044
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// User: Pannnn
#include <bits/stdc++.h>
using namespace std;
template<class T>
void printVector(const T &a) {
cout << "[ ";
for (size_t i = 0; i < a.size(); ++i) {
cout << a[i] << (i == a.size() - 1 ? " " : ", ");
}
cout << "]" << endl;
}
template<class T>
vector<vector<T>> matrix2(size_t n, size_t m, T init) {
return vector<vector<T>>(n, vector<T>(m, init));
}
/*
void dfs(vector<vector<int>> &res, stack<int> st, vector<int> tmp, int cur, int n) {
if (cur > n) {
while (!st.empty()) {
int t = st.top();
st.pop();
tmp.push_back(t);
}
res.push_back(tmp);
return;
}
st.push(cur);
dfs(res, st, tmp, cur + 1, n);
st.pop();
if (!st.empty()) {
int t = st.top();
st.pop();
tmp.push_back(t);
dfs(res, st, tmp, cur, n);
}
}
*/
// 模拟 超时
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
/*
int n;
cin >> n;
vector<vector<int>> res;
stack<int> st;
vector<int> tmp;
dfs(res, st, tmp, 1, n);
cout << res.size() << endl;
*/
/*
定义状态:
f[i][j] i表示栈内数字的个数,j表示未进栈数字的个数,f为当前状态下有几种情况
栈里的数字有两种选择:出栈和不出栈
若出栈,栈里数字个数减一
如果不出栈,未进栈的数字要进来一个压栈,栈内个数加一,未进栈个数减一
f[i][j] = f[i - 1][j] + f[i + 1][j - 1];
边界:
当栈内没有数字时,只能进栈,且此操作后的出栈情况取决于f[i + 1][j - 1];
当栈外没有数字时,只能出栈:f[i][0] = 1;
*/
int n;
cin >> n;
auto info = matrix2<int>(n + 2, n + 2, 0);
for (int i = 0; i <= n; ++i) {
info[i][0] = 1;
}
for (int j = 1; j <= n; ++j) {
for (int i = 0; i <= n; ++i) {
if (i >= 1) {
info[i][j] = info[i - 1][j] + info[i + 1][j - 1];
} else {
info[i][j] = info[i + 1][j - 1];
}
}
}
cout << info[0][n] << endl;
return 0;
}
posted @   Pannnn  阅读(121)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
-->
点击右上角即可分享
微信分享提示