m0_57117352 2022-04-06 19:01 采纳率: 81.3%
浏览 30
已结题

关于背包问题的动态规划

这个代码问题出在哪啊,无法运行出结果,运行到输入背包质量就不行了

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

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-04-06 19:20
    关注

    scanf("%d",c);//背包容量
    改为scanf("%d",&c);//背包容量
    for ( i = 0; i <=n; i++)
    改为
    for ( i = 0; i <n; i++)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月5日
  • 已采纳回答 10月28日
  • 创建了问题 4月6日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效