P1855 榨取kkksc03

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
36
37
38
39
40
41
#include<bits/stdc++.h>
using namespace std;
const int MAXW1 = 200;
const int MAXW2 = 200;
const int INF = 0x3f3f3f3f;

int n, W1, W2;
int d[MAXW1 + 10][MAXW2 + 10];

inline int read() {
register char c;
for (c = getchar(); (c < '0' || c>'9') && c != '-'; c = getchar());
register bool f = c == '-';
register int s = f ? 0 : c - '0';
for (c = getchar(); c >= '0' && c <= '9'; c = getchar())s = (s << 3) + (s << 1) + c - '0';
return f ? -s : s;
}

int eva_maxV(int W1, int W2) {
int ans = -INF;
for (int i = 0; i <= W1; i++) {
for (int j = 0; j <= W2; j++) ans = max(ans, d[i][j]);
}
return ans;
}

int main() {
n = read();
W1 = read();
W2 = read();
int v, w1, w2;
for (int i = 1; i <= n; i++) {
v = 1;
w1 = read();
w2 = read();
for (int j = W1; j >= w1; j--) {
for (int k = W2; k >= w2; k--) d[j][k] = max(d[j][k], d[j - w1][k - w2] + v);
}
}
cout << eva_maxV(W1, W2);
}