zoukankan      html  css  js  c++  java
  • Permutation game(博弈&&状态压缩)

    题意:

    给出一个序列,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
    ";
            else cout<<"Bob
    ";
        }
        return 0;
    }
    
  • 相关阅读:
    Java之final关键字
    Java之代码块
    Java之单例设计模式
    Java之数组
    python基础知识第九篇(函数)
    css--属性
    css-选择器
    css--引入css的3种方法
    html--多选
    python-列表--处理
  • 原文地址:https://www.cnblogs.com/minun/p/11823118.html
Copyright © 2011-2022 走看看