题意:曹操为了提高智商,与其他人对战,一开始有一个基础的IQ值,每战胜一人(即只要其IQ比这个人大),然后就可以增长2点的IQ,如果两人IQ相等,则增长1点IQ,现在问如何弄,可以获得最大的IQ值。
典型的贪心算法 先找比自己大的人比 让IQ += 2,然后再 IQ++ ;
先来一个快排 ,在找到第一个比 IQ 大的数,从这个数后 找比它大的数比 ,后又回溯就可以了。
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a, const void *b)
{
return (*(int *)a-*(int *)b);
}
int main()
{
int a[501],N,IQ,i;
while(scanf("%d%d",&N,&IQ)!=EOF)
{
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
qsort(a,N,sizeof(a[0]),cmp);
for(i=0;i<N;i++)
{
if(a[i]>IQ)
{
a[i] = -1;
IQ += 2;
}
}
for(i=N-1;i>=0;i--)
{
if(a[i] != -1)
{
IQ += 1;
}
}
printf("%d\n",IQ);
}
}