完全背包问题,c语言编程

#include<stdio.h>intV[1000][1000];intmax(inta,intb){if(a>=b)returna;elsereturnb;}intK... #include<stdio.h>
int V[1000][1000];int max(int a,int b){ if(a>=b) return a; else return b;}
int KnapSack(int n,int w[],int v[],int C){ int i,j; for(i=0;i<=n;i++) V[i][0]=0; for(j=0;j<=C;j++) V[0][j]=0; for(i=0;i<=n-1;i++) for(j=0;j<=C;j++) if(j<w[i]) V[i][j]=V[i-1][j]; else V[i][j]=max(V[i-1][j],V[i-1][j-w[i]]+v[i]); j=C; for(i=n-1;i>=0;i--) if(V[i][j]>V[i-1][j]) j=j-w[i]; return V[n-1][C];}
int main(void){ int s; int w[1000]; int v[1000]; int n,i; int C; scanf("%d %d", &C, &n); for(i=0;i<n;i++) scanf("%d %d",&w[i], &v[i]); s=KnapSack(n,w,v,C); printf("%d",s);
return 0;}
这是我的源码,求大神找出我的错误,找不出来了
展开
 我来答
haiyangfenghuo
推荐于2016-01-14 · TA获得超过2439个赞
知道大有可为答主
回答量:2388
采纳率:0%
帮助的人:771万
展开全部
#include<stdio.h>
float V[1000],V1[1000];
int max(float a[],int n)
{
int s = 1;
float fmax = a[1];
for (int j=2;j<n;j++)
{
if (a[j]>fmax)
{
fmax = a[j];
a[j] = 0;
s = j;
}
}
return s;
}

int KnapSack(int n,int w[],int v[],int C)
{
int Maxvalue = 0;
int X[1000],w0[1000],w1[1000];
memset(X,0,sizeof(X));
memset(w0,0,sizeof(w0));
memset(w1,0,sizeof(w0));
for (int j=1;j<n;j++)
{
V[i] = 1.0*v[i]/w[i];
V1[i] =V[i];
}
X[1] = max(V1,n);
int w0[1] = n/w[X];
int w1[1] = n%w[X];
int k = 1;
while (w1[k++]!=0)
{
X[K] = max(V1,n);
w0[k] = w1[k]/w[Y];
w1[k] = w1[k]%w[Y];
}
for (int m=1;m<k;m++)
{
Maxvalue+=w0[m]*w[X[K]]*v[X[k];
}
return Maxvalue;

}
int main(void)
{
int s;
int w[1000];
int v[1000];
int n,i;
int C;
scanf("%d %d", &C, &n);
for(i=0;i<n;i++)
scanf("%d %d",&w[i], &v[i]);
s=KnapSack(n,w,v,C);
printf("%d",s);
return 0;
}
更多追问追答
追问
亲,你这编译一下好多错误啊
追答
#include
#include
float V[1000],V1[1000];
int fmax(float a[],int n)
{
int s = 1;
float fmax = a[1];
for (int j=2;jfmax)
{
fmax = a[j];
s = j;
}
}
a[s] = 0;
return s;
}

int KnapSack(int n,int w[],int v[],int C)
{
int Maxvalue = 0;
int X[1000],w0[1000],w1[1000];
memset(X,0,sizeof(X));
memset(w0,0,sizeof(w0));
memset(w1,0,sizeof(w0));
for (int j=1;j<n;j++)
{
V[j] = 1.0*v[j]/w[j];
V1[j] =V[j];
}
X[1] = fmax(V1,n);
w0[1] = n/w[X[1]];
w1[1] = n%w[X[1]];
int k = 1;
while (w1[k++]!=0&&k<n)
{
X[k] = fmax(V1,n);
w0[k] = w1[k-1]/w[X[k]];
w1[k] = w1[k-1]%w[X[k]];
}
for (int m=1;m<k;m++)
{
Maxvalue+=w0[m]*w[X[m]]*v[X[m]];
}
return Maxvalue;

}
int main(void)
{
int s;
int w[1000];
int v[1000];
int n,i;
int C;
scanf("%d %d", &C, &n);
for(i=1;i<n;i++)
scanf("%d %d",&w[i], &v[i]);
s=KnapSack(n,w,v,C);
printf("%d",s);
return 0;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式