窃贼问题,但是写出来系统提示越界了0.0,请教
窃贼问题:一个小偷背包最多装8公斤物品,
物品1:6 48(价值)
物品2:5 40
物品3:2 12
物品4:1 8
物品5:1 7
求拿到物品最大价值的方案
以下是代码
#include <stdio.h>
#define N 5
void ss(int *a,int i,int *b,int *p,int x,int max,int l)
{
int m[N],t[N],o[N],j;//m[N],用来接收重量。t[N],储存方案。o[N]价值,j贮存上一次价值总和//
for(j=0;j<N;j++)
{
m[N]=*b++;
}
for(j=0;j<N;j++)
{
o[N]=*p++;
}
for(j=0;j<N;j++)
{
t[j]=*a++;
}
t[i]=m[i];//增加方案//
max+=o[i];//价值增长//
x+=t[i];//重量增长//
if(x>8&&i<N)
{
t[i]=0;
max-=o[i];
i++;
ss(t,i,m,o,x,max,l);//递归调用//
}
else if(x<8&&i<N)//增加元素//
{
ss(t,i,m,o,x,max,l);
}
else if(x==8&&i<N)
{
if(j>max&&i<(N-1))
{
t[i]=0;
max-=o[i];
ss(t,i,m,o,x,max,l);
}
else if(i==(N-1))
{
printf("%d",t[i]);//输出方案//
printf("%d",max);//输出最大价值//
}
}
j=max;
}
main()
{
int i,max,q[N],p[N],m[N],x,l;
max=0;
x=0;
l=0;
printf("输入小偷可选择物品重量\n");
for(i=0;i<N;i++)
{
scanf("%d",&m[i]);
}//输入可选重量//
for(i=0;i<N;i++)
{
q[i]=0;
}//将集合全部归零//
printf("请输入对应价值\n");
for(i=0;i<N;i++)
{
scanf("%d",&p[N]);
} //输入可选价值//
i=0;
ss(q,i,m,p,x,max,l);
}
[此贴子已经被作者于2016-12-7 19:13编辑过]