题意:有一个数列,1-10,10个元素乱排,问是否可以将数列按顺序抽出元素组成新数列,使得新数列是递增的而且原数列剩下的数字也是递增的
题解:
dfs,记录步数和当前两个新数列的末尾,如果可以放,就下一轮dfs,完全是模拟了题目的一个图形
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<queue>
#define pr(x) cout<<#x<<" "<<x;
#define pl(x) cout<<#x<<" "<<x<<endl;
#include<math.h>
#include<algorithm>
using namespace std;
int num[10];
bool dfs(int step,int btop,int ctop){
if(step==9){
if(num[step]>btop||num[step]>ctop){
return true;
}
else return false;
}
bool b = false;
bool c = false;
if(num[step]>btop){b = dfs(step+1,num[step],ctop);}
if(num[step]>ctop){c = dfs(step+1,btop,num[step]);}
return (b||c);
}
int main(){
int t;
cin>>t;
while(t--){
memset(num,0,sizeof(num));
for(int i = 0;i<10;i++){
cin>>num[i];
}
bool ans = dfs(0,0,0);
if(ans){cout<<"YES"<<endl;continue;}
else{cout<<"NO"<<endl;continue;}
}
}