题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2091
Given N numbers in a line, we can determine a continuous subsequence by giving its start position and its length.
PMH and Roy played a game the other day. Roy gives the start position first, then PMH gives the length. Roy wants the mean of the subsequence as large as possible, while PMH wants it as small as possible.
You are to calculate the best result Roy can get, assuming PMH is very clever.
Input
There are multiple testcases.
Each testcase begins with a line containing N only.
The following line contains N numbers, separated by spaces.
Output
For each testcase, you are to print the best mean of subsequece Roy can get, precise to 6 digit after decimal point.
Sample Input
10
2 10 4 6 5 10 10 2 3 2
Sample Output
5.777778
这题可以说是我很不理解的一题。。。
#include <iostream>
#include <cstdio>
using namespace std;
double a[10005],b[10005];
int main()
{
//freopen("cin.txt","r",stdin);
int n,i,j;
double maxm;
while(cin>>n){
for(i=1;i<=n;i++) scanf("%lf",&a[i]);
maxm=b[n]=a[n];
for(i=n-1;i>=1;i--){
b[i]=(a[i]+b[i+1]*(n-i))/(n-i+1);
maxm=max(maxm,b[i]);
}
printf("%.6lf\n",maxm);
}
return 0;
}
本文深入探讨了一个涉及子序列平均值计算的算法问题,通过实例解析了如何通过给定序列的位置和长度,计算出最优的子序列平均值。详细解释了求解过程中的关键步骤和证明,旨在帮助读者理解和解决类似问题。
142

被折叠的 条评论
为什么被折叠?



