rt,程序如下:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int NN=55,MM=5e6+5,M=4.9e6;
int n,q,v[NN],c[NN],f[MM],nx,ny;
signed main(){
cin>>n>>q;
memset(f,0xcf,sizeof f);
f[0]=0,nx=1;
for(int i=1;i<=n;i++){
int v,c;cin>>v>>c;
if(c*nx>ny*v)ny=c,nx=v;
for(int j=v;j<=M;j++)f[j]=max(f[j],f[j-v]+c);
}
while(q--){
int V;cin>>V;
int l=0,r=V/nx+1;
while(l<r){
int mid=l+r>>1;
if(V-mid*nx<=M)r=mid;
else l=mid+1;
}
if(f[V-nx*l]<0)cout<<"-1\n";
else cout<<f[V-nx*l]+ny*l<<"\n";
}
return 0;
}