Kochiya Sanae is a lazy girl who makes and sells bread. She is an expert at bread making and selling. She can sell the i-th customer a piece of bread for price pi. But she is so lazy that she will fall asleep if no customer comes to buy bread for more than w minutes. When she is sleeping, the customer coming to buy bread will leave immediately. It's known that she starts to sell bread now and the i-th customer come after ti minutes. What is the minimum possible value of w that maximizes the average value of the bread sold?
InputThere are multiple test cases. The first line of input is an integer T ≈ 200 indicating the number of test cases.
The first line of each test case contains an integer 1 ≤ n ≤ 1000 indicating the number of customers. The second line contains n integers 1 ≤ pi ≤ 10000. The third line contains n integers 1 ≤ ti ≤ 100000. The customers are given in the non-decreasing order of ti.
<h4< dd="">OutputFor each test cases, output w and the corresponding average value of sold bread, with six decimal digits.
<h4< dd="">Sample Input2 4 1 2 3 4 1 3 6 10 4 4 3 2 1 1 3 6 10<h4< dd="">Sample Output
4.000000 2.500000
1.000000 4.000000
思路是枚举所有可能的w,w从1枚举到最大的来买的相邻人的时间差取,所有情况的平均价值最大值就可以了,并纪录下对应的w就可以了,具体的代码看下面
#include <bits/stdc++.h>
using namespace std;
int main()
{
int num;
scanf("%d", &num);
int tm[1010];
int val[1010];
while(num --){
int n;
scanf("%d", &n);
int maxn = 0;
memset(tm, 0, sizeof(tm));
memset(val, 0, sizeof(val));
for(int i = 1; i <= n; i ++){
scanf("%d", &val[i]);
}
for(int i = 1; i <= n; i ++){
scanf("%d", &tm[i]);
maxn = max(maxn, tm[i] - tm[i - 1]);
}
int tot, j;
double w=0, avg=0, nowavg;
//cout << maxn << endl;
for(int i = 1; i <= maxn; i ++){
tot=0;
for(j = 1; j <= n; j ++){
if(tm[j] - tm[j-1] <= i){
tot += val[j];
}else {
if(j == 1)
nowavg = 0;
else nowavg = tot*1.0 / (j - 1);
if(avg < nowavg){
avg = nowavg;
w = i;
}
break;
}
}
if(j == n + 1){
nowavg = tot*1.0 / n;
if(avg < nowavg){
avg = nowavg;
w = i;
}
}
}
printf("%.6f %.6f\n", w, avg);
}
return 0;
}

本文探讨了一个有趣的问题:如何确定懒惰的面包师Kochiya Sanae的等待时间w,以便最大化售出面包的平均价值。通过枚举所有可能的w值并计算相应的平均价值,找出最优解。
1914

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



