01分数规划
1 #include<iostream>
2 #include<algorithm>
3 #include<cstdio>
4 using namespace std;
5 struct datatype
6 {
7 int a;
8 int b;
9 double c;
10 }data[10001];
11 int n,k;
12 bool com(const datatype& x,const datatype& y)
13 {
14 return x.c>y.c;
15 }
16 double cal(double x)
17 {
18 for(int i=1;i<=n;i++)
19 {
20 data[i].c=data[i].a-data[i].b*x;
21 }
22 sort(data+1,data+n+1,com);
23 double res=0;
24 for(int i=1;i<=n-k;i++)
25 {
26 res+=data[i].c;
27 }
28 return res;
29 }
30 int main()
31 {
32 while(true)
33 {
34 scanf("%d%d",&n,&k);
35 if(n==0&&k==0)
36 {
37 break;
38 }
39 for(int i=1;i<=n;i++)
40 {
41 scanf("%d",&data[i].a);
42 }
43 for(int i=1;i<=n;i++)
44 {
45 scanf("%d",&data[i].b);
46 }
47 double l=0.0,r=1.0;
48 double mid;
49 for(int i=1;i<=100;i++)
50 {
51 mid=(l+r)/2;
52 if(cal(mid)<0)
53 {
54 r=mid;
55 }
56 else
57 {
58 l=mid;
59 }
60 }
61 printf("%.0f\n",l*100);
62 }
63 return 0;
64 }