我写了个0-1背包问题的C++程序,编译没错误,但运行有错误。求解释~~ 5
#include<iostream.h>#include<iomanip.h>voidmain(){intv[1000];intw[1000];intm[1000][10...
#include<iostream.h>
#include<iomanip.h>
void main()
{
int v[1000];
int w[1000];
int m[1000][1000];
int i,j,n,C,MAXV;
int x[1000];
MAXV=0;
cout<<"请输入一共多少件物品\n";
cin>>n;
cout<<"请输入背包的容量\n";
cin>>C;
cout<<"请依次输入背包的容量和对应价值:\n";
for(i=1;i<n;i++)
cin>>w[i]>>v[i];
for(j=0;j<w[n];j++)
m[n][j]=0;
for(j=w[n];j<=C;j++)
m[n][j]=v[n];
for(i=n-1;i>=1;i--)
for(j=0;j<C;j++)
if(j<w[i])
m[i][j]=m[i+1][j];
else
m[i][j]=m[i+1][j]>m[i+1][j-w[i]]+v[i]?m[i+1][j]:m[i+1][j-w[i]]+v[i];
for(i=1;i<n;i++)
if(m[i][C]==m[i+1][C])
x[i]=0;
else {
x[i]=1;
C=C-w[i];
}
x[n]=m[n][C]>0?1:0;
int sum=0;
for(i=1;i<=n;i++)
if(x[i]>0){
sum+=v[i];
cout<<setw(3)<<i;
}
cout<<endl;
cout<<"最大价值为:"<<sum<<endl;
} 展开
#include<iomanip.h>
void main()
{
int v[1000];
int w[1000];
int m[1000][1000];
int i,j,n,C,MAXV;
int x[1000];
MAXV=0;
cout<<"请输入一共多少件物品\n";
cin>>n;
cout<<"请输入背包的容量\n";
cin>>C;
cout<<"请依次输入背包的容量和对应价值:\n";
for(i=1;i<n;i++)
cin>>w[i]>>v[i];
for(j=0;j<w[n];j++)
m[n][j]=0;
for(j=w[n];j<=C;j++)
m[n][j]=v[n];
for(i=n-1;i>=1;i--)
for(j=0;j<C;j++)
if(j<w[i])
m[i][j]=m[i+1][j];
else
m[i][j]=m[i+1][j]>m[i+1][j-w[i]]+v[i]?m[i+1][j]:m[i+1][j-w[i]]+v[i];
for(i=1;i<n;i++)
if(m[i][C]==m[i+1][C])
x[i]=0;
else {
x[i]=1;
C=C-w[i];
}
x[n]=m[n][C]>0?1:0;
int sum=0;
for(i=1;i<=n;i++)
if(x[i]>0){
sum+=v[i];
cout<<setw(3)<<i;
}
cout<<endl;
cout<<"最大价值为:"<<sum<<endl;
} 展开
2个回答
展开全部
int v[1000];
int w[1000];
int m[1000][1000];
int i,j,n,C,MAXV;
int x[1000];
这些定义用到的是栈空间,栈没那么大啊,老兄
int w[1000];
int m[1000][1000];
int i,j,n,C,MAXV;
int x[1000];
这些定义用到的是栈空间,栈没那么大啊,老兄
追问
知道,我改为100了都
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询