为啥不对啊
查看原帖
为啥不对啊
377434
tian_jun_cheng楼主2022/2/15 17:15
#include<bits/stdc++.h>
using namespace std;
int n,w;
int ww[301],t[301];
long long f[10001];
bool check(int mid)
{
	memset(f,0x3f,sizeof(f));
	f[0]=0; 
	long long ans=f[w];
	for(int i=1;i<=n;i++)
		for(int j=w;j>=0;j--)
			if(f[j]!=ans)
			{
				int k=j+ww[i];
				k=min(k,w);
				f[k]=max(f[k],f[j]+t[i]-(long long)ww[i]*mid);
			} 
	return f[w]>=0;
}
int main()
{
	cin>>n>>w;
	for(int i=1;i<=n;i++)
	{
		cin>>ww[i]>>t[i];
		t[i]*=1000;
	}
	int l=0,r=1000000;
	while(l<=r)
	{
		int mid=(l+r)>>1;
		if(check(mid))
			l=mid+1;
		else
			r=mid-1;
	}
	cout<<l-1;
	return 0;
}

2022/2/15 17:15
加载中...