题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4710
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?
There 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.
For each test cases, output w and the corresponding average value of sold bread, with six decimal digits.
2 4 1 2 3 4 1 3 6 10 4 4 3 2 1 1 3 6 10
4.000000 2.500000 1.000000 4.000000
代码如下:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int max(int a, int b)
{
if(a > b)
{
return a;
}
return b;
}
int main()
{
int T;
int n;
int p[1017], t[1017];
scanf("%d",&T);
while(T--)
{
int i, j;
scanf("%d",&n);
for(i = 0; i < n; i++)
{
scanf("%d",&p[i]);
}
for(i = 0; i < n; i++)
{
scanf("%d",&t[i]);
}
int c[1017];
c[0] = t[0];
for(i = 1; i < n; i++)
{
c[i] = max(c[i-1], t[i]-t[i-1]);
}
double sum = 0;
double w, ave = 0;
for(i = 0; i < n; i++)
{
double tt = c[i];
sum = 0;
for(j = 0; j < n; j++)
{
if(tt >= c[j])
{
sum+=p[j];
}
else
{
break;
}
}
if(sum/j > ave)
{
ave = sum/j;
w = c[i];
}
}
printf("%.6lf %.6lf\n",w,ave);
}
return 0;
}
ZOJ 3607 Lazier Salesgirl(贪心啊 )
原文地址:http://blog.csdn.net/u012860063/article/details/45132857