poj1323--贪心算法

题意:一群人打牌包括你,每人出一张牌,谁最大,谁就算赢一局,问你最少能赢几局?

  给出人数N,每人的牌数M,及你的牌。

分析:1.这题需比较大小,就像我们打牌时要将牌排序以便出牌,显然要先将手上的牌进行排序;

   2.如果我们抓到了最大的牌a[i-1]==m*n=count,显然我们必胜一局,但与此同时所有的牌已有一张最大的作废i--,count--,且我们手上的牌最大的变成了原来次大的a[i-2];

   3.如果我们最大的牌小于其他人手中的牌,那么我们输一局,且与此同时我们手上这张最大的牌和比它大的那张牌作废(为了保证够大的牌不浪费我们赢得最少,其他人只需出一张大于我们的牌即可),此时i--且count=count-2;

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int num=0,n,m,a[10001],sum;
    while(cin>>n>>m,m!=0||n!=0){
        int count=m*n;
        sum=0;
        for(int i=0;i<m;i++)
        cin>>a[i];
        sort(a,a+m);
        for(int i=m-1;i>=0;i--){
            if(a[i]<count){
                count-=2;
            }
            else if(a[i]==count){
                sum++;
                count--;
            }
        }
        cout<<"Case "<<++num<<": "<<sum<<endl;
    }
    return 0;
}

 

posted on 2015-10-16 21:02  T~Z  阅读(217)  评论(0编辑  收藏  举报