vector<vector<int>> dp(n + 1, vector<int>(totalC + 1, -1)); 用标准数组(即[])用C++重写这句代码
时间: 2024-09-08 16:00:44 浏览: 40
在C++中,如果你想要使用标准数组而不是`std::vector`来实现这个二维数组,你可以这样做,但请注意,由于数组大小固定,你需要预先确定`n`和`totalC`的值。这里是对应的代码:
```cpp
const int n = ...; // 具体数值
const int totalC = ...; // 具体数值
// 创建一个静态大小的二维数组
int dp[n + 1][totalC + 1]; // 全部初始化为-1
// 初始化第一行和第一列
for (int i = 0; i <= n; ++i) {
dp[i][0] = 0;
}
// 然后进行动态填充
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= totalC; ++j) {
if (c[i] > j) {
dp[i][j] = dp[i - 1][j];
} else {
int a = dp[i - 1][j - c[i]];
int b = dp[i - 1][j];
if (a != -1 && b != -1) {
dp[i][j] = min(dp[i][j], b);
} else if (a == -1 && b == -1) {
dp[i][j] = -1; // 无解
} else if (b == -1) {
dp[i][j] = a + 1;
}
}
}
}
```
这里假设`c`是一个已知的整数数组,代表每个物品的重量。因为数组大小固定,所以你需要在编写代码前确定`n`和`totalC`的具体数值。如果它们会随着程序运行变化,那么还是建议使用动态数组如`std::vector`。
阅读全文