题目链接: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