当货物总重量∑Wi小于或等于M时,把所有货物装入,总价值就达到最大。因此,关键是解决当总重量大于M时装货的方法。
我们先从一个具体例子入手来研究一下本题的特点。
设n=3;M=20。
W1=15W2=10W3=8
P1=18P2=15P3=10
下面是我写的一个程序,不过好像有点问题,正确的结果应该是输出X1=2,X2=10,X3=8
但是输出的是:X1=10,X2=8,X3=2.
#include
#include
#define N 50
float find(float p[N],float w[N],float x[N] ,float M,int n) /*先放单位价值量大的物体,再考虑小的物体*/
{
int i;
float maxprice;
for (i = 0; i0)
{
maxprice=maxprice+p*x/w;
i++;
}
return maxprice;
}
int main()
{
int n,flag=1;
float temp,M,w[N],p[N],x[N];
int k;
printf("输入物品种数:\n");
scanf("%d",&n);
printf("输入背包重量:\n");
scanf("%f",&M);
printf("输入%d个物品的重量:\n",n);
for(k=0;k #include #define N 50float find(float p[N],float w[N],float x[N] ,float
|