#include"stdio.h"void main
{
printf("************贪处算法解决背包问题****************\n "); //标题float m , w[100], p[1000], p1[1000], s , pp =0; //设置变量 int n , i, j, b[50], max;
printf (" 请输入物品的个数及背包的总容量\n"); //提示用户输入物品的相printf("物品的总个数:");
scanf ("% d ",& n );
printf( "背包的总容量:");
scanf ("% f ",& m );
for (i=1, s=0; i <= n; i ++)//算出物品的总重量 s
{
printf ("物品的编号:% d\n 重量:",i);
scanf ("% f ",& w[i]);
printf ("价值:");
scanf ("% f ",& p[i]);
p1[i] = p[i];
s = s + w[i];
if ( s <= m ) //物品的总重量如果小于 m,则全装入
{
for (i=1; i <= n ; i ++)
{
pp += p[i];
}
printf ("选择的结果是:物品的总重量小于背包的容量故全装入背包,得到的总利润是:% f\n ",pp );
return0;
}
}
printf ("选择的结果是: n ");//当物品的总重量大于 m 时的情况 for (i=1; i <= n ; i ++)
{
max = l ;
for ( j =2; j <= n;j ++)
{
if (p1[j] /w[j] > pl[max] /w[max])//比较物品的单位价值
{
max=j;
}
p1[max]=0; //标记已经排了序的物品
b[i]= max;
}
}
for ( i =1, s=0; s < m && i<= n ; i ++)
{
s= s + w [b[i]];
float wl = w [b[i-1]];
if (s!= m) //超出背包容量
{
w [b[i-1]]= m -( s - w[b[i-1]]); //装入第 b [i-1]个物品的重量
p[b[i-1]]= w[b[i-1]]/ w1 * p [b[i-1]]; //装入第 b [i-1]个物品的价值
}
for(j =1;j<=1;j++) //输出选取的结果
{
printf ("物品的编号:% d ,可装入该物品的重量:% f \n ", b[j], w[b[j]]);
pp += p[b[j]];
}
}
printf("总价值%f\n",pp); //装入背包的物品的总价值
}