33,006
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <vector>
using namespace std;
#include "func.h"
bool ju(const vector<int>&vec)
{
int n=(int)vec.size ();
int max=0;
for(int i=0;i<=n-1;i++)
{
if(vec[i]<max)continue;
else if(vec[i]>max)
{//设vec[i]后面第一个小于max的数为p,则区间(vec[i],p)上小于vec[i]的数应为降序
vector<int> pipe(2,vec[i]);//长度为2的管道
for(int j=i;j<=n-1;j++)
{
if(vec[j]<max)break;
if(vec[j]<vec[i])
{
pipe[0]=pipe[1];
pipe[1]=vec[j];
if(pipe[0]>pipe[1])continue;
else if(pipe[0]<pipe[1])
{
return false;
}
}
}
max=vec[i];
}
}
return true;
}
main()
{
vector<int> vec1,vec2;
init(vec1,6,
4,2,5,3,1,6);
init(vec2,6,
4,3,5,2,1,6);
cout<<ju(vec1)<<endl;
cout<<ju(vec2)<<endl;
}
#include <iostream>
#include <vector>
using namespace std;
#include "func.h"
void finn(const int n,int cur,vector<int>&stac,vector<int>&outL,int&count)
{
if((int)outL.size ()==n)//终点
{
print(outL);
count++;
}
if(cur!=n+1)//入栈
{
//操作
stac.push_back(cur);
//进入下层
finn(n,cur+1,stac,outL,count);
//恢复
stac.pop_back ();
}
if(!stac.empty())//出栈
{
//留底
int temp=stac[(int)stac.size ()-1];
//操作
outL.push_back (temp);
stac.pop_back ();
//进入下层
finn(n,cur,stac,outL,count);
//恢复
outL.pop_back ();
stac.push_back (temp);
}
}
int f(const int n)
{
vector<int> stac;
vector<int> outL;
int count=0;
finn(n,1,stac,outL,count);
return count;
}
main()
{
int n;
cout<<"n=";
cin>>n;
cout<<"共"<<f(n)<<"个"<<endl;
}