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