题意:
给出一个序列,Bob和Alice轮流每次删除一个数,Alice先手,谁先删完后的序列为上升序列,谁获胜。
思路:
对于每一个状态进行压缩,搜索所有状态,如果从每一个状态可以达到递增,那个状态就是必胜的
一开始递增为输
#include<bits/stdc++.h>
using namespace std;
#define maxn 2020
#define mem(a,b) memset(a,b,sizeof(a))
int a[25];
int dp[(1<<16)];
int n;
int check(int now)
{
int ls=0;
for(int i=1;i<=n;i++)
{
if(now&(1<<(i-1)))
{
if(ls>=a[i])
return 0;
ls=a[i];
}
}
return 1;
}
int dfs(int now)
{
// cout<<now<<endl;
if(check(now)) return dp[now]=0;
if(dp[now]!=-1) return dp[now];
dp[now]=0;
for(int i=1;i<=n;i++)
{
if(!(now&(1<<(i-1)))) continue;
if(!dfs(now^(1<<(i-1)))) dp[now]=1;
}
return dp[now];
}
int main()
{
int t;
cin>>t;
while(t--)
{
mem(dp,-1);
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
if(dfs((1<<n)-1)) cout<<"Alice\n";
else cout<<"Bob\n";
}
return 0;
}