POJ2976:Dropping tests——题解
2018-01-11 08:11
225 查看
http://poj.org/problem?id=2976
题目大意:给定n个二元组(a,b),从中取n-k个,使得100*∑a/∑b最大。
01分数规划裸题,设λ是小于等于最优解的,那么λ<=∑a/∑b,先通过移项来得到新的表达法∑a-λ∑b>=0。
就可以二分答案做了。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef double dl; const int N=1005; const dl eps=1e-7; dl a ,b ,t ; int n,k; double solve(dl l,dl r){ while(r-l>eps){ dl mid=(l+r)/2; for(int i=1;i<=n;i++)t[i]=a[i]-mid*b[i]; sort(t+1,t+n+1); dl sum=0; for(int i=k+1;i<=n;i++)sum+=t[i]; if(sum>0)l=mid; else r=mid; } return r; } int main(){ while(scanf("%d%d",&n,&k)!=EOF&&n+k){ for(int i=1;i<=n;i++)scanf("%lf",&a[i]); for(int i=1;i<=n;i++)scanf("%lf",&b[i]); printf("%.f\n",solve(0,1)*100); } return 0; }
相关文章推荐
- POJ2976--Dropping tests
- poj2976(二分,最大值平均化模板)Dropping tests
- POJ2976-01分数规划&二分-Dropping tests
- POJ-2976:Dropping tests【01分数规划】
- poj Dropping tests
- POJ 2976 -- Dropping tests
- 【POJ 2976】Dropping tests&01分数规划详解
- POJ 2976 Dropping tests——最大化平均值
- poj 2976-Dropping tests解题报告
- POJ 2976 Dropping tests
- POJ 2976 Dropping tests
- POJ-2976-Dropping tests
- poj Dropping tests 【二分】【分数规划】
- POJ 2976:Dropping tests 01 分数规划
- 【二分查找-最大化平均值】POJ2976 - Dropping Test
- 【POJ】2976 - Dropping tests 二分->最大化平均值
- F - Dropping tests POJ - 2976(二分)
- POJ Dropping tests
- POJ-2976 Dropping tests
- POJ 2976 Dropping tests