您的位置:首页 > 运维架构

poj 2976-Dropping tests解题报告

2012-05-07 22:56 501 查看
链接:http://poj.org/problem?id=2976

01分数规划,有一个序列ai,和一个序列bi,从中取出下标相等的m个数,使得∑a[i]/∑b[i]最大,刚开始用dp做的,TLE了,看了别人的题解,二分

View Code

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define N 1005
#define eps 1e-2
double a
,b
;
double val
;
int cmp(const void *a,const void *b)
{
double c=*(double *)a;
double d=*(double *)b;
if(c>d)
return -1;
return 1;
}
int main()
{
int n,k,i,j;
double low,high,sum,mid;
while(scanf("%d%d",&n,&k)&&(n||k))
{
low=0,high=100;
for(i=0;i<n;i++)
scanf("%lf",&a[i]);
for(i=0;i<n;i++)
scanf("%lf",&b[i]);
while(fabs(high-low)>eps)
{
sum=0;
mid=(low+high)/2.0;
for(i=0;i<n;i++)
val[i]=a[i]*100-mid*b[i];//这里有些不懂啊,唉
qsort(val,n,sizeof(double),cmp);
for(i=0;i<n-k;i++)
sum+=val[i];
if(sum>0)
low=mid;
else
high=mid;
}
printf("%.0lf\n",mid);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: