first WA on #3
查看原帖
first WA on #3
1367475
yaomengshun楼主2024/6/5 17:06
#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
2024/6/5 17:06
加载中...