求助 我用C语言 实现0-1背包问题 运行结果都是0 不知道是什么错误就有错,请指教

suixinpiaodang 2011-08-31 09:06:37
代码是:
#include<stdio.h>
#define max 101
int F(int i,int j)
{
int v[max],w[max],n,c;
for(int i=n;i>=1;i--){
for(int j=0;j<=c;j++){
if(i==n)
return 0;else
return F(i+1,j);
if(j>=v[i])
return F(i+1,j-v[i])+w[i];

}
}
}
int main()
{
int i,j,n,c,v[max],w[max];
printf("请输入背包的容量c: ");
scanf("%d",&c);
printf("请输入物品的种类n: ");
scanf("%d",&n);
printf("请输入物体的体积和重量: ");
for(i=0;i<n;i++)
{

scanf("%d%d",&v[i],&w[i]);

printf("%d\n",F(i,j));
}
}


结果是

请输入背包的容量c:20
请输入物品的种类n:5
请输入物体的体积和重量:1 3 2 4 3 5 4 6 5 7
结果是0
请问这是什么逻辑错误啊???
...全文
177 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
suixinpiaodang 2011-08-31
  • 打赏
  • 举报
回复
1楼的问结贴??是什么意思呢?
suixinpiaodang 2011-08-31
  • 打赏
  • 举报
回复
我试过
就像:
#include<stdio.h>
#define max 101
int n,c,v[max],w[max];
int F(int i,int j)
{

for(int i=n;i>=1;i--){
for(int j=0;j<=c;j++){
if(i==n)
return 0;
else
return F(i+1,j);
if(j>=v[i])
return (F(i,j)>=(F(i+1,j-v[i])+w[i])?F(i,j):F(i+1,j-v[i]));

}
}
}
int main()
{
int i,j;
printf("请输入背包的容量c: ");
scanf("%d",&c);
printf("请输入物品的种类n: ");
scanf("%d",&n);
printf("请输入物体的体积和重量: ");
for(i=0;i<n;i++)
{

scanf("%d%d",&v[i],&w[i]);
}
printf("%d\n",F(i,j));
}


但是还是这样啊?帮忙解决一下,谢谢。。。。
AnYidan 2011-08-31
  • 打赏
  • 举报
回复
最简单,该为 全局变量
xiaoD 2011-08-31
  • 打赏
  • 举报
回复
总共也就20行代码,你再仔细看看,错误很明显
suixinpiaodang 2011-08-31
  • 打赏
  • 举报
回复
,请问,那我应该怎么改?
Trinx 2011-08-31
  • 打赏
  • 举报
回复
确定结贴吗?
十八道胡同 2011-08-31
  • 打赏
  • 举报
回复
int v[max],w[max],n,c;
for(int i=n;i>=1;i--){ 此刻n是什么
for(int j=0;j<=c;j++){此刻c是什么

此时n,c只是F里面的临时变量和main里面的n,c没关系的
lvjing_CSDN 2011-08-31
  • 打赏
  • 举报
回复
你函数内部的v和w数组没有初始化,n和c也没初始化。
suixinpiaodang 2011-08-31
  • 打赏
  • 举报
回复
楼上的大哥 我看了好长之间了 还是没看出来 到底是什么逻辑错误啊?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧