思路:
背包;
代码:
#include <bits/stdc++.h> using namespace std; #define maxn 5005 int n,m,bi[maxn],k,k1,k2,dp[maxn],ci[maxn],vi[maxn]; inline void in(int &now) { char Cget=getchar();now=0; while(Cget>'9'||Cget<'0')Cget=getchar(); while(Cget>='0'&&Cget<='9') { now=now*10+Cget-'0'; Cget=getchar(); } } int main() { in(k1),in(k2),k=k2/k1,in(n),in(m); for(int i=1;i<=m;i++) in(bi[i]),bi[i]=bi[i]*k; for(int i=1;i<=n;i++) in(vi[i]),in(ci[i]),vi[i]=bi[vi[i]]; in(m); for(int i=1;i<=n;i++) { for(int v=m;v>=vi[i];v--) dp[v]=max(dp[v-vi[i]]+ci[i],dp[v]); } cout<<dp[m]; return 0; }