51nod 1257 背包问题 V3

来源:互联网 发布:数据库教学视频哪个好 编辑:程序博客网 时间:2024/05/16 00:32

分数规划。

#include<bits/stdc++.h>using namespace std;const int MAXN=50050;long long resw,resp;int n,k;struct node{int w,p;double rate;}a[MAXN];bool cmp(node n1,node n2){return n1.rate>n2.rate;}bool judge(double p){int i;double mark;resw=0;resp=0;mark=0;for(i=1;i<=n;i++)a[i].rate=a[i].p-a[i].w*p;sort(a+1,a+n+1,cmp);for(i=1;i<=k;i++){resw+=a[i].w;resp+=a[i].p;mark+=a[i].rate;}if(mark>=0)return 1;elsereturn 0;}int main(){int i;double lef,rig,mid;long long tmp,answ,ansp;while(~scanf("%d%d",&n,&k)){for(i=1;i<=n;i++){scanf("%d%d",&a[i].w,&a[i].p);}lef=0;rig=50050;for(i=0;i<100;i++){mid=(lef+rig)/2;if(judge(mid)){answ=resw;ansp=resp;lef=mid;}elserig=mid;}tmp=__gcd(answ,ansp);printf("%lld/%lld\n",ansp/tmp,answ/tmp);}}


0 0
原创粉丝点击