HDU 1338 Game Prediction

来源:互联网 发布:新手怎么做网络推广 编辑:程序博客网 时间:2024/05/15 21:58

这题我用的是贪心算法,我的理解是这样的:

要求我最少能赢的次数,就是求别人最多能赢的次数。首先把我的牌先升序排序,然后我从小开始出,对于我出的牌,别人应该尽可能的压,而且用他们比我大的最小的那张牌;如果他们不压,那么他们后面这张牌就很有可能用不上,就少赢一次。

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<stack>#include<queue>using namespace std;int card[52];bool used[1002];int n,m,t;int _find(int x){    for(int i=x+1;i<=t;i++)        if(!used[i])        return i;    return 0;}int main(){    int k=1;    while(scanf("%d%d",&m,&n))    {        if(n==0&&m==0)            break;        memset(used,false,sizeof(used));        for(int i=1;i<=n;i++)        {            scanf("%d",&card[i]);            used[card[i]]=true;        }        sort(card+1,card+n+1);        t=n*m;        int ans=0;        for(int i=1;i<=n;i++)        {            int a=_find(card[i]);            //printf("card=%d,a=%d\n",card[i],a);            if(a!=0)                used[a]=true;            else            {                ans+=n-i+1;                break;            }        }        printf("Case %d: %d\n",k++,ans);    }    return 0;}


0 0
原创粉丝点击