题目大意是有一个数列(调料)a1,a2,a3,.............an。
然后往锅里放,没放进两个 ,然后把这个数(调料)放到数列中去,依次进行。问最后的值最大是多少?
思路:当时想的也是贪心,想的是大数被/2比小数/2浪费的多。所以从小到大排个序就出来了,然后我一直考虑精度问题(题目压根没顾及精度。。),没敢直接相加/2,是先通分,最后再除。结果爆long long 我去,最后long double过的。。
相比我那个不是很靠谱的贪心,正解贪心答案 是成分值的线性组合。 成分越早插入锅中,其系数越小,最终总和就越小。 因此,它们应按其值的非递减顺序插入。
AC Code:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 100010;
double ans[1000];
int main()
{
int n;
cin>>n;
for(int i = 1;i<=n;++i)
{
cin>>ans[i];
}
sort(ans+1,ans+n+1);
long double sum = ans[1]+ ans[2];
long double k = 2;
for(int i = 3;i<=n;++i)
{
sum += k*ans[i];
k *= 2;
}
cout<<(long double)sum/k;
}