DP-Algo
This commit is contained in:
69
Algorithm/Recursion/P1044 [NOIP 2003 普及组] 栈.cpp
Normal file
69
Algorithm/Recursion/P1044 [NOIP 2003 普及组] 栈.cpp
Normal file
@@ -0,0 +1,69 @@
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
#include <deque>
|
||||
using namespace std;
|
||||
set<deque<int>> result;
|
||||
void dfs(deque<int>& path, deque<int>& stack, deque<int>& left){
|
||||
if(stack.size() == 0 && left.size() == 0){
|
||||
result.emplace(path);
|
||||
return;
|
||||
}
|
||||
else if(stack.size() == 0){
|
||||
int tmp = left.front();
|
||||
stack.push_back(tmp);
|
||||
left.pop_front();
|
||||
dfs(path, stack, left);
|
||||
left.push_front(tmp);
|
||||
stack.pop_back();
|
||||
}
|
||||
else if(left.size() == 0){
|
||||
int tmp = stack.back();
|
||||
stack.pop_back();
|
||||
path.push_back(tmp);
|
||||
dfs(path, stack, left);
|
||||
stack.push_back(tmp);
|
||||
path.pop_back();
|
||||
}
|
||||
else {
|
||||
{
|
||||
int tmp = left.front();
|
||||
left.pop_front();
|
||||
stack.push_back(tmp);
|
||||
dfs(path, stack, left);
|
||||
stack.pop_back();
|
||||
left.push_front(tmp);
|
||||
}
|
||||
{
|
||||
int tmp = stack.back();
|
||||
stack.pop_back();
|
||||
path.push_back(tmp);
|
||||
dfs(path, stack, left);
|
||||
path.pop_back();
|
||||
stack.push_back(tmp);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int main(){
|
||||
int n;
|
||||
cin >> n;
|
||||
deque<int> l(n), s, p;
|
||||
for(int i = 0; i < n; i++){
|
||||
l[i] = i + 1;
|
||||
}
|
||||
dfs(p, s, l);
|
||||
cout << result.size() << endl;
|
||||
/*
|
||||
for(auto x : result){
|
||||
for(auto y : x){
|
||||
cout << y << " ";
|
||||
}
|
||||
cout << endl;
|
||||
}*/
|
||||
for(auto x : *result.begin()){
|
||||
cout << x << " ";
|
||||
}
|
||||
cout << endl;
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user