背包问题的贪心算法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
贪心方法:总是对当前的问题作最好的选择,也就是局部寻优。最后得到整体最优。 应用:1:该问题可以通过“局部寻优”逐步过渡到“整体最优”。贪心选择性质与“动态规划”的主要差别。 2:最优子结构性质:某个问题的整体最优解包含了“子”问题的最优解。 代码如下: #include iostream.h struct goodinfo { ?float p;?//物品效益 ?float w;?//物品重量 ?float X;?//物品该放的数量 ?int flag;?//物品编号 };//物品信息结构体 void Insertionsort(goodinfo goods[],int n) { ?int j,i; ?for(j=2;j=n;j++) ?{ ??goods[0]=goods[j]; ???? i=j-1; ?? ??while (goods[0].pgoods[i].p) ??{ ???goods[i+1]=goods[i]; ???i--; ??} ??goods[i+1]=goods[0]; ?} }//按物品效益,重量比值做升序排列 void bag(goodinfo goods[],float M,int n) {? ? ?float cu; ?int i,j; ?for(i=1;i=n;i++) ??goods[i].X=0; ?cu=M;? //背包剩余容量 ?for(i=1;in;i++) ?{ ??if(goods[i].wcu)//当该物品重量大与剩余容量跳出 ???break; ?? ???goods[i].X=1; ???cu=cu-goods[i].w;//确定背包新的剩余容量 ?} ?if(i=n) ??goods[i].X=cu/goods[i].w;//该物品所要放的量 /*按物品编号做降序排列*/? ?for(j=2;j=n;j++) ?{ ??goods[0]=goods[j]; ???? i=j-1; ?? ??while (goods[0].flaggoods[i].flag) ??{ ???goods[i+1]=goods[i]; ???i--; ??} ??goods[i+1]=goods[0]; ?} /////////////////////////////////////////// ?cout最优解为:endl; ?for(i=1;i=n;i++) ?{ ??cout第i件物品要放:; ??coutgoods[i].Xendl; ?} } void main() {? ?cout|--------运用贪心法解背包问题---------|endl; ?cout|---power by zhanjiantao(028054115)---|endl; ?cout|-------------------------------------|endl; ?int j; ?int n; ?float M; ?goodinfo *goods;//定义一个指针 ?while(j) ?{ ?cout请输入物品的总数量:; ?cinn; ?goods=new struct goodinfo [n+1];// ?cout请输入背包的最大容量:; ?cinM; ?coutendl; ?int i; ?for(i=1;i=n;i++) ??{?goods[i].flag=i; ???cout请输入第i件物品的重量:; ???cingoods[i].w; ???cout请输入第i件物品的效益:; ???cingoods[i].p; ???goods[i].p=goods[i].p/goods[i].w;//得出物品的效益,重量比 ???coutendl; ??? ??} ? ?Insertionsort(goods,n); ?bag(goods,M,n); ?coutpress 1 to run agianendl; ?coutpress 0 to exitendl; ?cinj; ?} } #includestdio.h #includestdlib.h #define Max 100/*定义栈结构*/ typedef struct list{?int data[Max];?int top;} Seqstack; /*定义一个用来存储结果的链表*/ typedef struct List{?Seqstack result;?struct List * Next;} Seqlist,*Pointer; void Inicial_List(Pointer p) {?p=(Pointer)malloc(sizeof(Seqlist));? p-Next=NULL;} Seqstack Push_S

文档评论(0)

小教资源库 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档