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; }