给个实现
我待会写个题解,加上去
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const LL N=255;
const LL M=1005;
LL n,m,f[N][M],ans;
struct node
{
LL a,b;
}a[N];
bool cmp(node x,node y)
{
return x.a<y.a;
}
int main()
{
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%lld%lld",&a[i].a,&a[i].b);
}
memset(f,-127,sizeof(f));
f[0][0]=0;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
for(int j=0;j<=m;j++)
{
f[i][j]=f[i-1][j];
if(j-a[i].a>=0)f[i][j]=max(f[i][j],f[i-1][j-a[i].a]+a[i].b);
if(j+a[i].a>=m)ans=max(ans,(f[i-1][j]+a[i].b)*1000/(j+a[i].a));
}
}
printf("%lld",ans);
}