我正在尝试实施wikepedia的sudo代码,以解决背包问题,但是我的代码失败。 我的函数将带有两列的数据框X作为输入,第一个是权重,第二个是值
weights value
10 110
20 150
15 180
30 170
18 130
knapsnack_dyn<-function(X,W){
w<-c(0,X[,1])
v<-c(0,X[,2])
n<-nrow(X)
m<- matrix(0,nrow=n+1,ncol=W+1)
keep<-m
res<-c()
for (i in 1:n+1){
for (j in 0:W+1){
if (w[i]>j ){
m[i,j]<-m[i-1,j]
keep[i,j]<-0
}else{
m[i,j]<-max(m[i-1, j], m[i-1, j-w[i]] + v[i])
keep[i,j]<-1
}
}
}
K=W+1
for (i in n+1:1){
if(keep[i,K]==1){
res[i]<-i
K=K-w[i]
}
}
return(c(res,m[n+1,W+1]))
}