ZOJ 3519 Who is the Smartest Man (贪心)

Cao Cao is very pround of his newly finished book named "The Book of Mengde". He thinks the book contains all the wisdom of the world. But in order to prove this, he need to prove that he is the smartest people in the world first. In that age, people evaluate the intelligence of a man by his eloquence. So, Cao Cao begins to make a plan to argue with some famous person, like Guo Jia, Xun Yu and so on. Soon he realizes that the hardest opponent is Zhuge Liang. So he decide to make it the last opponent. Once he defeat Zhuge Liang in the argument. he will be consider the smartest man in the world and his book will be the best book.

Now, Cao Cao knows the intelligent point of himself and everyone he want to argue with before Zhuge Liang. And he knows that if he wins an argument.His intelligent point will increase because he can learn something from the argument. If he defeats a opponent whose intelligent point is higher than his, his intelligent point will increase by 2. If the intelligent point of the opponent is not higher than his, his intelligent point will only increase by 1.

Now,Cao Cao wants to know, what's the maximum intelligent point he could reach before he meets Zhuge Liang, assuming that he can win each argument before he meets Zhuge Liang.

Input

The first line of each case contains two postive integer N(N <= 500) and IPN is the number of people Cao Cao wants to argue with before he meets Zhuge Liang. IP is the intelligent point of Cao Cao at the begining. Then N postive integers followed describing the intelligent point of each opponent. Each intelligent point will be no higher than 1000.

Output

For each case, output the maximum intelligent point Cao Cao can reach before he argue with Zhuge Liang.

Sample Input
5 91
88 90 92 94 98
Sample Output
99

 【题解】 

  要获得最大智商,那么+2的次数要尽量多,所以必须先打败比他智商高一点点的人,+2后再次寻找比他智商高一点点的,直到没有比他高的,再从头去找剩下的,每次+1,最后得到最大值。

 

 见代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=800;
int m,n,a[N];

int main()
{
    while(~scanf("%d%d",&m,&n))
    {
        memset(a,0,sizeof(a));
        for(int i=1;i<=m;++i)
            scanf("%d",&a[i]);
        sort(a+1,a+m+1);
        for(int i=1;i<=m;++i)
        {
            if(n<a[i])
            {
                n+=2;
                a[i]=-1;
            }
        }
        for(int i=1;i<=m;++i)
        {
            if(a[i]!=-1)
                n++;
        }
        printf("%d\n",n);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值