zoukankan      html  css  js  c++  java
  • hdu 4371 Alice and Bob [博弈]

    题目

    题意:

    给一个数n和m个数d[m],现在A和B轮流进行操作,不能进行操作的人为输,规则如下:

    1.第一步A写一个0,设s[1]=0,第二步B令s[2]=s[1]+d[i]

    2.两人轮流从d数组中任选一个数d[k],令s[i]=s[i-1]+d[k]或者s[i]=s[i-1]-d[k];

    3.s[i]>s[i-2]并且s[i]<=n

    思路;

    从最终状态开始看,假设min是d中最小的数,如果s[i]+min>n,那么游戏结束,所以游戏的最后一步一定是s[i]=s[i-1]+min之后使得s[i]+min>n,至于为什么不能s[i]-d[i](违反了第三规则),所以对于任何一个状态如果我选择的不是min那么对手总可以减去min来使自己进行一次操作,但是如果我选min,对手就只能往上加。所以对于两个人的最好的策略就是每次都加一个min,看谁先不能加即可。

    #include <iostream>
    #include <cstring>
    #include <cmath>
    using namespace std;
    typedef  long long ll;
    const int INF  = 0x3f3f3f3f;
    int main()
    {
        int T;cin>>T;
        int n,m,x;
        int Case=1;
        while(T--)
        {
            cin>>n>>m;
            int minn = INF;
            for(int i=0;i<m;i++)
            {
                cin>>x;
                if(x<minn)
                    minn = x;
            }
    
            cout<<"Case #"<<Case++<<": ";
            int ans = n/minn;
            if(ans%2==0)
                cout<<"Alice"<<endl;
            else
                cout<<"Bob"<<endl;
    
        }
       return 0;
    }
    
  • 相关阅读:
    integer和double的比较.
    查看mysql版本的四种方法
    codefoces 1397D Stoned Game
    最小生成树集合合并
    codefoces 1400B RPG Protagonist
    codefoces 1400B RPG Protagonist
    牛客挑战赛42 小睿睿的伤害
    病毒扩散 排列组合
    Dus on tree 月出皎兮,佼人僚兮。
    msc的宠物 二分+树形DP
  • 原文地址:https://www.cnblogs.com/qie-wei/p/12094125.html
Copyright © 2011-2022 走看看