• 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;
    }
  • 相关阅读:
    每日一练leetcode
    java 中 int与string的相互转化
    每日一练leetcode
    每日一题leetcode
    每日一练leetcode
    每日一练leetcode
    每日一题leetcode
    Three20在IOS6中不能正常使用 迎客
    苹果提供的支付功能接口 迎客
    ios随记 迎客
  • 原文地址:https://www.cnblogs.com/tz346125264/p/4886388.html
Copyright © 2020-2023  润新知