資源簡介
給定N種物品和一個背包。物品i的重量是wi,其價值為vi,背包的容量為c。應(yīng)該如何選擇裝入背包的物品,使裝入背包中物品的總價值最大?
在選擇裝入背包的物品時,對每種物品i只有2種選擇,即裝入背包或不裝入背包,不能將物品i裝入背包多次,也不能只裝入部分的物品i
代碼片段和文件信息
#include?
#include?
int?n;?//物品數(shù)量
double?c;?//背包容量
double?p[100];?//排序后物品價值
double?pp[100];?//物品價值
double?w[100];?//排序后物品重量
double?ww[100];?//物品重量
double?cw=0.0;?//當(dāng)前重量
double?cp=0.0;?//當(dāng)前價值
double?bestp=0.0;?//當(dāng)前最優(yōu)價值
double?perp[100];?//單位物品價值(排序后)
int?order[100];????//排序
int?put[100];?//0為不裝,1為裝
void?Knapsack()//按單位價值排序函數(shù)
{
????int?ij;
????int?temporder=0;
????double?temp=0.0;
????for(i=1;i<=n;i++)?
????{
????????put[i]=0;
????????order[i]=i;
????????p[i]=pp[i];
????????w[i]=ww[i];
????}
????for(i=1;i<=n;i++)
????????perp[i]=pp[i]/ww[i];
????for(i=1;i<=n-1;i++)
????????for(j=i+1;j<=n;j++)
????????????if(perp[i] ????????????{
????????????????temp=perp[i];
????????????????perp[i]=perp[j];
????????????????perp[j]=temp;
????????????????temporder=order[i];
????????????????order[i]=order[j];
????????????????order[j]=temporder;
????????????????temp=p[i];
????????????????p[i]=p[j];
????????????????p[j]=temp;
???????????????
- 上一篇:c++api中文版
- 下一篇:C++ Primer中文版第五版帶目錄及源碼
評論
共有 條評論