题意
将一个长度为10,包含0–9所有数字的数字串从头开始放入两个不同的数字串的末尾,要求这两个数字串从前往后递增。
题解
暴力地01枚举,分别考虑放第一个串或第二个,每次判断是否合法,放完即可返回。
复杂度2的n次方,n<=10,不会超时
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
#define SF scanf
#define PF printf
#define MAXN 20
using namespace std;
int num[MAXN],q,n=10;
stack<int> a,b;
int dfs(int x){if(x==n+1)return 1;int res=0;if(a.empty()||num[x]>a.top()){a.push(num[x]);res=max(res,dfs(x+1));a.pop();}if(b.empty()||num[x]>b.top()){b.push(num[x]);res=max(res,dfs(x+1));b.pop();}return res;
}
int main(){SF("%d",&q);while(q--){for(int i=1;i<=n;i++)SF("%d",&num[i]);if(dfs(1)==1)PF("YES\n");elsePF("NO\n");}
}