这个代码问题出在哪啊,无法运行出结果,运行到输入背包质量就不行了
#include<stdio.h>
void Knaspack(int w[],int v[],int n,int c,int m[][50]);
int max(int x,int y);
void Traceback(int w[],int x[],int n,int c,int m[][50]);
int main()
{
int i;
int n,c;
int w[50],v[50];//物品体积、价值
int m[50][50];//最优值
int x[50];//观察是否有物品存入
printf("输入物品数量:");
scanf("%d",&n);//输入物品数量
printf("输入背包容量:");
scanf("%d",c);//背包容量
printf("输入物品的质量");
for ( i = 0; i <=n; i++)
{
scanf("%d",&w[i]);
}
printf("输入物品的价值");
for ( i = 0; i <= n; i++)
{
scanf("%d",&v[i]);
}
Knaspack(w,v,n,c,m);//寻找最优解
Traceback(w,x,n,c,m);//输出值
for(i=0;i<n;i++)
{
printf("%d",x[i]);
}
}
void Knaspack(int w[],int v[],int n,int c,int m[][50])
{
int i,j;
for(i=0;i<=n;i++)//初始化背包容量为0时
{
m[i][0]=0;
}
for(i=1;i<=c;i++)//初始化0个物品时
{
m[0][i]=0;
}
for(i=0;i<n;i++)
{
for(j=1;j<=c;j++)
{
if(w[i]>j)//无法装入装
{
m[i][j]=m[i-1][j];
}
else{//判断是否要装
m[i][j]=max(m[i-1][j],m[i-1][j-w[i]]+v[i]);
}
}
}
}
void Traceback(int w[],int x[],int n,int c,int m[][50])
{
int i;
int j;
j=c;
for(i=n;i>0;i--)
{
if(m[i][j]==m[i-1][j])
{
x[i-1]=0;
}
else{
x[i-1]=1;
j=j-w[i];
}
}
}
int max(int x,int y)
{
int l;
if(x>y)
{
l=x;
}
else
{
l=y;
}
}