1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| #include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k;
int p[105],v[105];
int a[8005],b[8005];
int dp[8005],f[8005];
int getAns(int a,int b) {
int l = 0,r = k,mid;
while(l < r) {
mid = (l + r) / 2;
if(100 * b <= a * p[mid]) r = mid;
else l = mid + 1;
}
return v[l] * a;
}
signed main() {
scanf("%lld%lld%lld",&n,&m,&k);
for(int i = 1;i <= k;i++) scanf("%lld",p + i);
for(int i = 1;i <= k;i++) scanf("%lld",v + i);
for(int i = 1;i <= n;i++) scanf("%lld%lld",a + i,b + i);
for(int i = 1;i <= n;i++) {
for(int j = a[i];j <= m;j++) {
if(j - a[i] != 0 && dp[j - a[i]] == 0) continue;
dp[j] = max(dp[j],dp[j - a[i]] + b[i]);
}
}
for(int i = 1;i <= m;i++) {
for(int j = 1;j <= i;j++) {
f[i] = max(f[i],f[i - j] + getAns(j,dp[j]));
}
}
printf("%lld\n",f[m]);
return 0;
}
|