读书人

背包递归有关问题错解

发布时间: 2012-08-02 11:35:25 作者: rapoo

背包递归问题,错解

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;
}

读书人网 >C语言

热点推荐