思路:
暴力思路是从小到大枚举学费 1~数组最大值
计算每种学费最后得出的总费用 取最大值
但是双for肯定tle
所以转变思路 因为题目要求如果总学费相同的情况下 得出学费最小的情况
所以我们把数组从小到大排序 则总学费=a[i]*(n-i) 因为a[i]后面的牛都能交的起学费
然后找出最大的就可以了
1、暴力tle
import java.util.*;
class Main
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] a=new int[n];
int maxx=-1;
for(int i=0;i<n;i++)
{
a[i]=sc.nextInt();
if(a[i]>maxx) maxx=a[i];
}
int idx=0;
long max=-1;
for(int i=1;i<=maxx;i++)
{
long sum=0;
for(int j=0;j<n;j++)
if(a[j]>=i) sum+=i;
if(sum>max)
{
max=sum;
idx=i;
}
}
System.out.print(max+" "+idx);
}
}
2、排序+枚举
import java.util.*;
class Main
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] a=new int[n];
for(int i=0;i<n;i++) a[i]=sc.nextInt();
Arrays.sort(a);
long max=-1;
int idx=0;
for(int i=0;i<n;i++)
{
long sum=(long)a[i]*(n-i);
if(sum>max)
{
max=sum;
idx=a[i];
}
}
System.out.print(max+" "+idx);
}
}