首页 > 其他 > 详细

【贪心专题】POJ 1323 && HDU 1338 Game Prediction (贪心)

时间:2015-04-05 23:34:32      阅读:286      评论:0      收藏:0      [点我收藏+]

链接:click here~~

题意:

有m个人,每个人有n张牌,牌点为在1~n*m中的不同的数。每回合每个人出一张牌,点数最大的那个人赢,给出A人初始时的n张牌的牌点,问A至少赢的次数。

【解题思路】 看做两个人互相出牌,注意出牌的顺序,你有m张牌,我有m*(n-1)张牌,每次我都出比你大一点的牌,如果没有,出最小的m张牌(可以忽略), 每次出最大的。如果别人手中最大的小于你的。得分+1,而对方则选择最小的一个扔掉。如果对方最大的大于你手中最大的,对方会选择自己手中最小但是比你最大的大的牌丢掉。也就是说,如果在我的排中找到最大点数的牌,就now++,否则别人就会把他的大牌拿出来跟我比,就now--,now最大的时候就是至少赢的次数。

代码: 

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=2005;
int dp[maxn];
bool flag[maxn];
int n,m,t,i,j,s,num,ans;
int main()
{
    int tot=1;
    while(~scanf("%d%d",&n,&m)&&n&&m)
    {
        memset(flag,0,sizeof(flag));
        for(i=0; i<m; i++)
        {
            scanf("%d",&dp[i]);
            flag[dp[i]]=1;//我手上没有的牌
        }
        int maxx=0,now=0;
        for(i=n*m; i>0; i--)
        {
            if(flag[i])
            {
                now++;
                if(now>maxx)
                    maxx=now;
            }
            else now--;
        }
        printf("Case %d: ",tot++);
        printf("%d\n",maxx);
    }
    return 0;
}

【贪心专题】POJ 1323 && HDU 1338 Game Prediction (贪心)

原文:http://blog.csdn.net/u013050857/article/details/44892617

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!