首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

背包递归有关问题,错解

2012-08-02 
背包递归问题,错解C/C++ code#includestdio.h#define N 5typedef struct node{int valueint size}Item

背包递归问题,错解

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

热点排行