为了简化程序,做了适当假设
假设的条件可以通过程序简单实现
/*
贪婪法求解背包问题
M:背包的承重
val:物体的单位价值,已安照从大到小排序
weig:物体的重量
n:物体总个数
*/
float CGreedy::knapsack(float M, float val[], float weig[], int n)
{
float Wg=0;
float Vl=0;
for(int i=0; i<n; i++)
{
if(Wg<M)
{
Vl+=val[i]*weig[i];
Wg+=weig[i];
}
else
{
float d = (M - (Wg - weig[i])) / weig[i];
Vl+=d*val[i];
break;
}
}
return Vl;
}
void main()
{
/
贪婪法求解背包问题
float val[9]= {1.6, 1.5, 1.0, 0.8, 0.7, 0.6, 0.4, 0.2, 0.1};
float weig[9]={3, 4, 2, 5, 1, 1, 2, 3, 7};
float M=17;
int n=9;
CGreedy m_Greedy;
float V = m_Greedy.knapsack(M, val, weig, n);
cout << "the value is "<< V << endl;
getchar();
return 0;
}