PTA | 程序设计类实验辅助教学平台 (pintia.cn)
坑点:排序
思路:该题要求出最大长度,因此解不唯一,我们要求最优解。
所以我们就要知道为什么同样做一半操作排序、不排序会导致不同的结果:
这是不排序的结果:
这是排序的结果:
比如3,7,5三个数:
(3+7)/2+5=10
(3+5)/2+7=11
这就是为什么要排序的原因,让小的在前面 (3,5),/2之后的消耗就小,再加上后面的相对大值,结果就更大。
#include<bits/stdc++.h>
using namespace std;
int a[10005];
int main()
{
int n;cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
// sort(a,a+n);
int sum=a[0];
for(int i=1;i<n;++i)
{
sum=(sum+a[i])/2;
}
printf("%d",sum);
return 0;
}