0-1背包代码中的错误.我的代码中有什么错误
Bug in the 0-1 Knapsack code. What is the error in my code?
我在实践部分用极客解决了这个问题,但这个代码在我不理解的地方失败了
#include <iostream>
using namespace std;
int main() {
//code
int T,N,W;
cin>>T;//The number of test cases
while(T-->0){
cin>>N>>W;//N for number of items and W for capacity
int dyna[N+1][W+1] = {{0,0}};//table to store values
int val[N+1],wt[N+1];//val stores value and wt for weight
for(int i = 1;i <= N;i++)cin>>val[i];
for(int i = 1;i <= N;i++)cin>>wt[i];
for(int i = 0;i <=N;i++){
for(int j = 0;j <= W;j++){
if(i==0||j==0)dyna[i][j]=0;
else if(wt[i]<=W)
dyna[i][j] = max(dyna[i-1][j],val[i]+dyna[i-1][j-wt[i]]);
else
dyna[i][j] = dyna[i-1][j];
}
}
cout<<dyna[N][W]<<endl;
}
return 0;
}
首先,您有单独的N和W长度,这是多余的,因为它们应该总是相等的。不过,我认为你观察到的问题是你的else if
。您检查当前的权重是否小于项目数,这实际上没有意义。它可能应该类似于else if(j-wt[i]>=0)
,因为您正在尝试确定是否可以从当前和j
中减去当前权重wt[i]
,并获得有效的(在边界内(结果。我想你会得到一个segfault或类似的错误,因为你试图访问dyna[i-1][j-wt[i]]
,例如,当i
和j
为1,wt[i]
为10时,因为dyna[0][-9]
(可能(是非分配内存。
相关文章:
- 错误处理.将系统错误代码映射到泛型
- 为什么我在使用void函数时得到错误代码C2276
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- 逻辑运算符上出现错误代码 a')'
- 'val' Arduino 错误代码之前的预期'('
- 我在贪吃蛇游戏中收到了错误代码 -1073741571
- 根据 GetLastError 直接写入磁盘会导致错误代码 5
- 当我选择大于 720 的矩阵大小时,程序退出并显示错误代码.可能是什么原因?
- 创建进程 API 失败,在窗口 122 上出现错误代码 10
- 使用另一个函数调用一个函数(都在类中)时出现问题.没有错误代码C++
- 当命令失败时,gzip 会在 C++ 中返回错误代码吗?
- 从 C++ 调用 cURL 命令会返回意外的错误代码,如 1792 和 6656
- WSALookupServiceBegin() 上的错误代码 10022(无效的 arugment)
- C++ Schannel POST 400 错误代码错误请求
- openCL-创建子缓冲区返回错误代码13
- 更新了Runge-Kutta(RK4)C++错误代码中的二阶DE
- 获取有关使用未初始化内存的错误代码
- 排序程序的意外错误代码
- 正在将DJI错误代码记录到流中
- 来自API的错误代码..处理什么是好的做法