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

链接: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 (贪心)

相关文章:

你感兴趣的文章:

标签云: