背包递归问题,错解
- C/C++ code
#include<stdio.h>#define N 5typedef struct node{ int value; int size;}Item;Item s[N];int knpa(int cap);int main(){ int i,cap; printf("背包容量:"); scanf("%d", &cap); printf("每个物品的大小与价值:\n"); for (i = 0; i < N; i++) scanf("%d %d", &s[i].size, &s[i].value); printf("max=%d\n", knpa(cap)); return 0;}int knpa(int cap)//递归背包函数{ int i,max,space,t; max = 0; for (i = 0; i < N; i++) { if ((space = cap - s[i].size) >= 0) { if ((t = knpa(space) + s[i].value) > max) max = t; } } return max;}
这背包递归出来有问题,请指教下!
[解决办法]
我资源下载区里有个,应该对你有点用
[解决办法]
是不是同一件物品不能取多次,试着改了一下,好像蒙对了,
int knpa(int cap)
{
int i,max,space,t,k;
max=0;
for(i=0;i<n;i++)
{
k=s[i].value;
if((space=cap-s[i].size)>=0)
{ s[i].value=0;
if((t=knpa(space)+k)>max)
max=t;
s[i].value=k;
}
}
return max;
}