F - The MAX
Giving N integers, V1, V2,,,,Vn, you should find the biggest value of F.
2 1 2 0
4017
思路:由于各x相加最大为2009,每一个x最小为1,要使最后和最大,可令系数v最大的那一项的x最大,即令其他项的x都为1,那么这一项
的x就是2009-(n-1)=2010-n,乘以系数v;其余项的x都是1,所以其总和就是系数v之和。
最后结果可能超出int范围,所以在定义时,应使v为long long型,这样才能自动转换。(易错)
#include<cstdio>
#include<algorithm>
using namespace std;
bool cmp(int A,int B)
{
return A>B;
}
int main()
{
int N,i;
long long F,sum;
long long v[100+11];
while(scanf("%d",&N),N)
{
sum=0;
F=0;
for(i=0;i<N;i++)
{
scanf("%lld",&v[i]);
}
sort(v,v+N,cmp);
for(i=1;i<N;i++)
{
sum+=v[i];
}
F=(2010-N)*v[0]+sum;
printf("%lld\n",F);
}
return 0;
}