POJ2976 Dropping tests
摘自大佬博客:
https://blog.csdn.net/hzoi_ztx/article/details/54898323
给出n组ai和bi,去掉k个使得a的总和除以b的总和最大
01分数规划问题
把这个看成一次函数
y=B-A*x
对于每组{xi}都对应一条直线,如图
而函数解为直线与x轴焦点,且最优解离原点最远。
这时,可以考虑二分,随意悬垂一条直线,如果与直线焦点在x轴上方,那么就是取小了,反之取大了,如果正好在x轴上,那就是这个解。
double check(double x){ For(i,1,n)t[i]=a[i]-b[i]*x; sort(t+1,t+1+n); FFor(i,n,m+1)ans+=t[i]; return ans; } mi=min(b[i]),mx=max(a[i]); l=0,r=mx/mi; while(r-l>eps){ if(check(mid)>0)l=mid; else r=mid; } printf("%.0f",mid*100);