求HACK
查看原帖
求HACK
316801
YukinoYukinoshita楼主2021/12/16 22:19
#include<cstdio>
#include<queue>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXN=505;
const int MAXW=2e3+5;
struct node{
	int t,w;
}a[MAXN];
int n;
int w;
double dp[MAXW]; 
double check(double mid)
{
	for(int i=1;i<=MAXW-5;i++)
	{
		dp[i]=-0x3f3f3f3f;
	}
	dp[0]=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=MAXW-5;j>=a[i].w;j--)
		{
			dp[j]=max(dp[j],dp[j-a[i].w]+a[i].t-a[i].w*mid);
		}
	}
	double res=-0x3f3f3f3f;
	for(int i=w;i<=MAXW-5;i++)
	{
		res=max(res,dp[i]);
	 } 
	 return res;
}
int main()
{
	scanf("%d %d",&n,&w);
	for(int i=1;i<=n;i++)
	{
		scanf("%d %d",&a[i].w,&a[i].t);
	}
	double l=0;
	double r=1e9;
	while(r-l>1e-9)
	{
		double mid=(l+r)/2;
		if(check(mid)>=0)
		{
			l=mid;
		}
		else
		{
			r=mid;
		}
	//	printf("%lf %lf\n",l,r);
	}
	printf("%d",int(l*1000));
}
2021/12/16 22:19
加载中...