#include <bits/stdc++.h>
using namespace std;
int n, m, v[200005], w[200005], f[2005][2005];
int cnt = 0;
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
int x, y, k, jc = 1;
cin >> y >> x >> k;
while (k >= jc)
{
v[++cnt] = x * jc;
w[cnt] = y * jc;
k -= jc;
jc *= 2;
}
if (k >= 1)
{
v[++cnt] = x * k;
w[cnt] = y * k;
}
}
n = cnt;
for (int i = 1; i <= n; i++)
{
for (int j = 0; j <= m; j++)
{
if (j >= v[i]) f[i % 1000][j % 1000] = max(f[(i - 1) % 1000][j % 1000], f[(i - 1) % 1000][(j - v[i]) % 1000] + w[i]);
else f[i % 1000][j % 1000] = f[(i - 1) % 1000][j % 1000];
}
}
cout << f[n % 1000][m % 1000];
return 0;
}
用了滚动数组结果WA了后面8个点
#3.input:
100 1000
80 5 25
4 2 98
45 28 30
50 13 90
50 43 27
40 4 48
79 2 2
100 22 80
52 11 18
84 40 32
8 43 75
28 1 3
42 2 46
93 31 41
99 49 72
21 29 33
40 24 45
72 34 66
15 41 70
14 30 66
63 6 76
72 28 8
98 30 60
42 17 52
74 21 68
8 37 36
70 42 43
92 5 35
58 27 48
96 41 84
62 26 50
12 23 96
67 18 94
15 41 52
82 24 48
37 6 39
43 50 26
70 28 17
18 14 2
2 5 88
17 20 42
57 10 70
82 20 85
97 27 47
97 27 38
22 20 61
45 49 31
26 3 94
62 41 35
28 42 55
9 7 41
9 4 92
64 18 92
57 25 62
67 11 22
89 28 29
81 41 43
97 23 23
40 40 7
8 29 87
14 6 68
49 15 16
27 19 7
49 1 54
97 36 40
4 28 11
97 45 49
5 45 48
53 44 27
30 36 21
40 38 81
12 30 62
20 14 28
71 23 13
7 14 81
17 46 1
49 11 37
56 13 46
59 31 16
90 15 74
39 27 88
34 29 73
40 8 11
76 29 73
36 16 18
83 17 40
68 25 40
24 50 39
88 1 1
9 3 73
58 42 34
7 22 92
36 50 39
24 15 51
21 37 23
91 45 16
33 8 76
29 13 15
57 3 62
55 43 12
#3 expected output:
17442
my wrong input:
138057