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 }
时间: 2024-10-14 06:53:31