poj 2976Dropping tests迭代法

利用迭代法能获得更好的时间效率

View Code
 1 #include<stdio.h>
 2 #include<math.h>
 3 #include<stdlib.h>
 4 #define N 1005
 5 #define eps 1e-6
 6 struct node
 7 {
 8     double a,b,v;
 9 };
10 node p[N];
11 int n,k;
12 int cmp(const void *a,const void *b)
13 {
14     node c=*(node *)a;
15     node d=*(node *)b;
16     if(c.v>d.v)
17     return -1;
18     return 1;
19 }
20 double work(double l)
21 {
22     int i;
23     for(i=0;i<n;i++)
24     p[i].v=p[i].a-p[i].b*l;
25     qsort(p,n,sizeof(node),cmp);
26     double suma=0,sumb=0;
27     for(i=0;i<n-k;i++)
28     suma+=p[i].a,sumb+=p[i].b;
29     return suma/sumb;
30 }
31 void solve()
32 {
33     double tmp,ans=0;
34     while(1)
35     {
36         tmp=work(ans);
37         if(fabs(tmp-ans)<eps)
38         break;
39         ans=tmp;
40     }
41     printf("%d\n",(int)(100*(ans+0.005)));
42 }
43 int main()
44 {
45     int i;
46     while(scanf("%d%d",&n,&k)&&(n||k))
47     {
48         for(i=0;i<n;i++)
49         scanf("%lf",&p[i].a);
50         for(i=0;i<n;i++)
51         scanf("%lf",&p[i].b);
52         solve();
53     }
54     return 0;
55 }
原文地址:https://www.cnblogs.com/caozhenhai/p/2489348.html