#include<bits/stdc++.h>
#define N 255
#define maxw 1005
using namespace std;
const double eps=1e-6,inf=1e6;
int n,W,w[N],t[N];
double v[N],f[maxw];
inline bool check(double x){
for(int i=1;i<=W;++i) f[i]=-inf;
for(int i=1;i<=n;++i) v[i]=t[i]-x*w[i];
for(int i=1;i<=n;++i){
for(int j=W;j>=W-w[i] && ~j;--j) f[W]=max(f[W],f[j]+v[i]);
for(int j=W-1;j>=w[i];--j) f[j]=max(f[j],f[j-w[i]]+v[i]);
}
return f[W]>eps;
}
int main(){
scanf("%d%d",&n,&W);
for(int i=1;i<=n;++i) scanf("%d%d",&w[i],&t[i]);
double l=0,r=1e7;
while(r-l>eps){
double mid=0.5*(l+r);
if(check(mid)) l=mid;
else r=mid;
}
printf("%d",(int)floor(1000*r));
return 0;
}
【bzoj 5281】Talent Show(分数规划的背包dp验证)
最新推荐文章于 2019-10-29 22:03:36 发布