d数组小了
by xueshengyi @ 2023-12-23 13:57:30
@[huangshuyuan2010](/user/1104901)
1. 您 `d[10000]` 数组的初始值是未定义的,可能包含任意值。使用 dp 的话,建议将数组值初始化。
2. 题目好像未给出数据范围。如果输入的物品数量 $n$ 或背包容量 $m$ 超过 $1 \times 10 ^ 4$,您的程序将无法正确处理所有的数据。
我使用了 `fill` 函数来初始化 `d` 数组。您可以参考一下。
```cpp
#include<bits/stdc++.h>
using namespace std;
const int MAX_N = 2e5 + 5;
const int MAX_M = 2e5 + 5;
int n, m, w[MAX_N], v[MAX_N], d[MAX_M];
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> w[i] >> v[i];
}
fill(d, d + MAX_M, 0); // 初始化数组d
for (int i = 1; i <= n; i++) {
for (int l = m; l >= w[i]; l--) {
d[l] = max(d[l], d[l - w[i]] + v[i]);
}
}
cout << d[m];
return 0;
}
```
希望可以帮到你。
by Zemu_Ooo @ 2023-12-23 13:59:43
@[Zemu_Ooo](/user/467824)
谢谢
by hsy20101122 @ 2023-12-23 14:01:32
@[xueshengyi](/user/971543)
谢谢
by hsy20101122 @ 2023-12-23 14:01:52
bracelet whose weight is no more than M (1 ≤ M ≤ 12,880).m告诉范围是12880
by xueshengyi @ 2023-12-23 14:04:43