0914-01分數規劃-POJ2976
阿新 • • 發佈:2018-12-09
分析
這個就是典型的01分數規劃,最最普通的那種
(題外話:poj真的有毒……不要用 lf 輸出)
而且我也不知道怎麼講啊……
直接上程式碼吧
程式碼
#include<cstdio> #include<cmath> #include<iostream> #include<algorithm> #include<cstdlib> #define N 1009 #define eps 1e-10 using namespace std; int n,k,a[N],b[N]; double c[N]; bool check(double r){ double ans=0; for(int i=1;i<=n;++i) c[i]=a[i]-r*b[i]; sort(c+1,c+n+1); for(int i=n;i>k;--i) ans+=c[i]; if(ans>=0) return 1; return 0; } int main(){ while((scanf("%d%d",&n,&k)),n|k){ for(int i=1;i<=n;++i) scanf("%d",&a[i]); for(int i=1;i<=n;++i) scanf("%d",&b[i]); double l=0,r=1,ans; /*int t=50; while(t--){//針對浮點數這類的二分,最好限定二分次數,不然很容易死掉 double mid=(l+r)/2.0; if(check(mid)) ans=mid,l=mid+1; else r=mid-1; }*/ while(r-l>1e-6) { double mid=(l+r)/2; if(check(mid)) l=mid; else r=mid; } printf("%.0f\n",100*l);//然後poj真的有毒,千萬不要用lf輸出 } return 0; }