【题意】
对于最大深度给定的栈,判断几个序列是否可能为入栈顺序为1到n的序列对应的出栈序列
【思路】
1. 对于出栈序列中的任一个数,在它后面出栈的比它小的数必定是按照递减顺序出栈的。从后往前计算出每个位置对应的递减序列长度是否超出栈的容量,并判断是否比自己小的数不构成递减序列,如此便可判断出栈序列是否可行;
2. AC了以后看了看网上别人的做法,发现其实可以直接用进栈、出栈模拟
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char const *argv[])
{
int m,n,k;
cin >> m >> n >> k;
for(int i=0; i<k; i++){
vector<int> depth;
vector<int> seq;
depth.resize(n);
seq.resize(n);
for(int j=0; j<n; j++){
cin >> seq[j];
}
bool flag = true;
for(int j=n-1; j>=0; j--){
depth[j] = 1;
int min = 0;
for(int p=n-1; p>j; p--){
if(seq[p]<seq[j]){
if(seq[p]>min){
min = seq[p];
depth[j]++;
}
else{
flag = false;
break;
}
}
if(depth[j]>m){
flag = false;
break;
}
}
if(!flag){
break;
}
}
if(flag){
cout << "YES" << endl;
}
else{
cout << "NO" << endl;
}
}
system("pause");
return 0;
}