64,684
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
using namespace std;
void lowsort(int *ww,int n)
{
int index;
int temp;
for(int j=0;j<n;j++)
{
index=j;
for(int k=j+1;k<n;k++){
if(ww[k]>index)
{
index=k;
}
}
if(index!=j)
{
temp=ww[index];
ww[index]=ww[j];
ww[j]=temp;
}
}
}
void BiLi(int *w,int *v,int n,int ww[])
{
for(int i=0;i<n;i++)
{
ww[i]=v[i]/ww[i];
}
lowsort(ww,n);
}
int nap(int *w,int *v,int *x,int n,int C)
{
int sum=0;
int *ww=new int [n];
for(int i=0;i<n;i++) x[i]=0;
BiLi(w,v,n,ww);//这里的排序应该不对吧。。你只是把ww排了序,而w,v并没有跟着一起排序。。这样w,v跟ww的序号会对不上的。。
int j=0;
while(w[j]<=C)//这里应该是<=吧。。
{
C=C-w[j];
x[j]=1;
sum=sum+v[j];
j++;
}
x[j]=C/w[j];
sum=sum+ww[j]*v[j];
return sum;
}
void main()
{
int C;
cout<<"背包容量为"<<endl;
cin>>C;
int n;
cout<<"物品个数为"<<endl;
cin>>n;
int *p=new int [n];
int *q=new int[n];
int *x=new int [n];
cout<<"物重"<<endl;
for(int i=0;i<n;i++)
{
cin>>p[i];
}
cout<<"物品价值"<<endl;
for(int j=0;j<n;j++)
{
cin>>q[j];//i改为j
}
cout<<"输出最大总价值"<<endl;
cout<< nap(p,q,x,n,C)<<endl;
cout<<"输出装入的物品"<<endl;
for(int k=0;k<n;k++)
{
cout<<x[k]<<" ";//i改为k
}
cout<<endl;
}
#include<iostream>
using namespace std;
void lowsort(int *ww,int n)
{
int index;
int temp;
for(int j=0;j<n;j++)
{
index=j;
for(int k=j+1;k<n;k++)
if(ww[k]>index)
{
index=k;
}
if(index!=j)
{
temp=ww[index];
ww[index]=ww[j];
ww[j]=temp;
}
}
}
void BiLi(int *w,int *v,int n,int ww[])
{
for(int i=0;i<n;i++)
{
ww[i]=v[i]/ww[i];
}
lowsort(ww,n);
}
int nap(int *w,int *v,int *x,int n,int C)
{
int sum=0;
int *ww=new int [n];
for(int i=0;i<n;i++)
x[i]=0;
BiLi(w,v,n,ww);
int j=0;
while(w[j]<C)
{
C=C-w[j];
x[j]=1;
sum=sum+v[j];
j++;
}
x[j]=C/w[j];
sum=sum+ww[j]*v[j];
return sum;
}
void main()
{
int C;
cout<<"背包容量为"<<endl;
cin>>C;
int n;
cout<<"物品个数为"<<endl;
cin>>n;
int *p=new int [n];
int *q=new int[n];
int *x=new int [n];
cout<<"物重"<<endl;
for(int i=0;i<n;i++)
{
cin>>p[i];
}
cout<<"物品价值"<<endl;
for(int j=0;j<n;j++)
{
cin>>q[j];//改为j
}
cout<<"输出最大总价值"<<endl;
cout<< nap(p,q,x,n,C);
cout<<"输出装入的物品"<<endl;
for(int k=0;k<n;k++)
{
cout<<x[k]<<" ";//要改为K
}
}
输出不是地址了,就是不知道逻辑对不对。