poj 1323

贪心基础题。至少能赢多少次。换句话说,就是自己每次出一张牌,其他人尽量让你输,其他人足够聪明,当你出一张牌时,为了让你输,会出一张比你大的,除非其他人没有,那么这轮你就赢啦,为了不造成浪费,最优的方法肯定是出一张比你出的牌大的牌中最小的牌(贪心的思想),可以证明这样的贪心结构是正确的

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=1001;
int vis[maxn],a[maxn];
int n,m;
int main()
{
	int t=0;
	while(cin>>n>>m)
	{
		if(m==0&&n==0) break;
		t++;
		memset(vis,0,sizeof(vis));
		for(int i=1;i<=m;i++)
		{
			cin>>a[i];
			vis[a[i]]=1;
		}
		sort(a+1,a+m+1);
		bool flag;
		int j=1;
		int amount=0;
		for(int i=1;i<=m;i++)
		{
			flag=false;
			for(;j<=n*m;j++)
			{
				if(!vis[j]&&j>a[i])
				{
					flag=true;
					j++;
					break;
				}
			}
			if(flag) amount++;
		}
		printf("Case %d: %d\n",t,m-amount);
	}
	return 0;
}


posted @ 2012-11-27 17:29  LJ_COME!!!!!  阅读(124)  评论(0编辑  收藏  举报