题意:有几堆牌,每一张牌上都有一个数字,两个人抽牌,A只能从牌顶抽,B只能从牌底抽。A先手,问,每个人都采取最优策略的情况下,最后两个人的值分别是多少

思路:首先,对于A和B来说,所有的牌都是已知的。对于偶数的牌堆,对于A来说,不管前一半是大于后面一半或者是小于,都没有意义,反正一人一半。对于奇数的,想去取最大的那个。

反正我觉得这题说证明过程说不出来,只能说好像是这样,似乎也蛮合乎道理的,看了网上很多的解题报告,其实讲的也不清的。 只能说贪心有时候要xjb贪心(当然要相对合理),然后结合下样例试试。 目前只能想到这了。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
vector <int> a;
bool cmp(const int& a,const int&b)
{
    return a>b;
}
int main(void)
{
    cin >> n;
    int sum1=0,sum2=0;
    for(int i=1;i<=n;i++)
    {
        int num;
        scanf("%d",&num);
        if(num%2==0)
        {
            for(int i=1;i<=num/2;i++)
            {
                int temp;
                scanf("%d",&temp);
                sum1+=temp;
            }
            for(int i=1;i<=num/2;i++)
            {
                int temp;
                scanf("%d",&temp);
                sum2+=temp;
            }
        }
        else
        {
            int temp;
            for(int i=1;i<=num/2;i++)
            {
                scanf("%d",&temp);
                sum1+=temp;
            }
            scanf("%d",&temp);
            a.push_back(temp);
            for(int i=1;i<=num/2;i++)
            {
                int temp;
                scanf("%d",&temp);
                sum2+=temp;
            }
        }
    }
    //printf("%d %d\n",sum1,sum2);
    sort(a.begin(),a.end(),cmp);
    for(int i=0;i<a.size();i++)
    {
        if(i==0 || i%2==0)
            sum1+=a[i];
        else
            sum2+=a[i];
    }
    printf("%d %d\n",sum1,sum2);
}

//这题刚拿到我就想到贪心了,接下来我想着贪心策略,想着想着就想错了(我以为是对的)。然后一直就想怎么去实现我的思路,结果放弃了,因为很难实现。 `
// DIV 1的C题。 意想不到的做了div1 ,其实发现题目没有想象中的那么难,感谢岐哥的套路

通过这题我学到了什么?
1.比赛的时候,碰到贪心的题,一定要敢去想,有时候xjb贪心,证明过程给不出来,但贪心策略合情合理的,很有可能是对的。