有一个形似央视大楼(Orz)的筒,从A口可以放球,放进去的球可通过挡板DE使其掉进B裤管或C裤管里,现有带1-10标号的球按给定顺序从A口放入,问是否有一种控制挡板的策略可以使B裤管和C裤管中的球从下往上标号递增。
输入:
第一行输入数据组数N。接下来N行为N组具体数据,每组数据中有10个整数,代表球的放入顺序。
输出:
对于每组数据,若策略存在,输出YES;若不存在,输出NO ;
【分析】:直接dfs查当前情况,直接看有没有符合的结果就行!
#include<bits/stdc++.h>
using namespace std;
int x[15],L[15],R[15];
int flage;
void dfs(int i,int l,int r){
if(i>10){
flage=1;
return ;
}
if(flage){
return ;
}
if(x[i]>L[l-1]){ //比较的前一位已经存入的值
L[l]=x[i]; //存的时候是存当前位置
dfs(i+1,l+1,r);
}
if(x[i]>R[r-1]){
R[r]=x[i];
dfs(i+1,l,r+1);
}
}
int main(){
int t;
scanf("%d",&t);
while(t--){
for(int i=1;i<=10;i++){
scanf("%d",&x[i]);
}
flage=0;
dfs(1,1,1);
if(flage){
printf("YES\n");
}
else {
printf("NO\n");
}
}
}