简单背包问题,谁来拯救我

问题描述

各位大大大神,我也是蛋疼的背包问题:假设有一个能装入总体积为T的背包和n件体积分别为w1,w2,。。。wn的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1+w2+。。。+wn=T,要求找出所有满足上述条件的解。例如,当T=10,各物品的体积分别为{1,8,4,3,2,5}时,可找出下列4组解:(1,4,3,2)(1,4,5)(8,2)(3,5,2)。基本要求1。设计一个背包问题的函数2。编写一个测试主函数。测试数据T=10,各物品的体积为{1,8,4,3,2,5}.

解决方案

解决方案二:
回帖加分(传说可以顶上去)
解决方案三:
staticvoidMain(string[]args){inttotal=10;int[]items=newint[]{1,8,4,3,2,5};intlength=items.Length;intnum=1;for(inti=0;i<length;i++){num*=2;}for(inti=0;i<num;i++){int[]resules=newint[length];int[]flags=ConvertInt(length,i);if(flags.Length!=items.Length){thrownewException();}for(intj=0;j<length;j++){resules[j]=items[j]*flags[j];}strings=string.Empty;if(Sum(resules)==total){for(intj=0;j<length;j++){if(resules[j]!=0){s+=resules[j]+",";}}}if(!string.IsNullOrEmpty(s)){Console.WriteLine("{{{0}}}",s.Trim(','));}}Console.ReadLine();}staticint[]ConvertInt(intnum,inti){int[]flags=newint[num];while(i!=0){flags[--num]=i%2;i=i/2;}returnflags;}staticintSum(int[]items){intsum=0;for(inti=0;i<items.Length;i++){sum+=items[i];}returnsum;}

解决方案四:
staticvoidMain(string[]args){inttotal=10;int[]items=newint[]{1,2,3,4,5,6,7,8,9};intnum=(int)Math.Pow((double)2,(double)items.Length);for(inti=0;i<num;i++){int[]results=newint[items.Length];int[]flags=ConvertInt(items.Length,i);for(intj=0;j<items.Length;j++){results[j]=items[j]*flags[j];}if(Sum(results)==total){Print(results);}}Console.ReadLine();}staticint[]ConvertInt(intnum,inti){int[]flags=newint[num];while(i!=0){flags[--num]=i%2;i=i/2;}returnflags;}staticintSum(int[]items){intsum=0;for(inti=0;i<items.Length;i++){sum+=items[i];}returnsum;}staticvoidPrint(int[]results){strings=string.Empty;for(intj=0;j<results.Length;j++){if(results[j]!=0){s+=results[j]+",";}}Console.WriteLine("{{{0}}}",s.Trim(','));}

解决方案五:
进来看看,顺便拿分。
解决方案六:
该回复于2011-06-20 13:34:52被版主删除
解决方案七:
有没有用C语言实现的?
解决方案八:
该回复于2012-03-09 08:33:51被版主删除
解决方案九:
课堂作业,不会的话正好找个女同学请教一下,顺便....
解决方案十:
使用递归算法staticvoidMain(){intbagCapacity=10;int[]stuff=newint[]{1,2,3,4,5,8};stringstuffs="";for(inti=0;i<stuff.Length;i++)stuffs+=stuff[i]+",";stringsolution="";bagSolution(bagCapacity,stuffs,solution);}staticvoidbagSolution(intCapacity,stringStuff,stringSolution){string[]Stuffs=Stuff.Split(',');for(inti=0;i<Stuffs.Length-1;i++){if(Capacity-int.Parse(Stuffs[i])==0){Solution+=Stuffs[i];Stuff="";for(intj=0;j<Stuffs.Length-1;j++)if(j!=i)Stuff+=Stuffs[j]+",";Console.Write(Solution+"n");}elseif(Capacity-int.Parse(Stuffs[i])>0){Capacity-=int.Parse(Stuffs[i]);stringtemStr=Solution;Solution+=Stuffs[i]+",";Stuff="";for(intj=0;j<Stuffs.Length-1;j++)if(j!=i)Stuff+=Stuffs[j]+",";bagSolution(Capacity,Stuff,Solution);Capacity+=int.Parse(Stuffs[i]);Solution=temStr;}}}

时间: 2024-11-08 18:20:47

简单背包问题,谁来拯救我的相关文章

专家,求组合算法!急需,谢谢。

问题描述 需求:根据长度和数量得出最合适以最为接近12为结果的分段组合.以最节省材料为准,总长度为12M要求分割的长度和数量:长度数量8.8M3条7.6M5条4.4M8条3M4条1.5M15条需要得出结果:8.8M+3M=11.8M3条7.6M+4.4M=12M5条4.4M+3+(1.5*3)=11.9M1条4.4+(1.5*5)=11.9M2条1.5*7=10.51条以最省材料分割为基准,12M为总长度.高手请指教,我是初学者,请详细讲一下思路,如果有代码也请给一下啊,自己做了一天还没想出来,

贪心法 背包问题 一道简单的实际问题 不知道大难如何计算出来的。

问题描述 贪心法 背包问题 一道简单的实际问题 不知道大难如何计算出来的. 问题:设有背包问题实例n=7,M=15(背包载重),(w0,w1,...,w6)=(2,3,5,7,1,4,1), 物品装入背包的收益为:(p0,p1,p2,p3,p4,p5,p6)=(10,5,15,7,6,18,3). 求这一实例的最优解和最大收益 答案:最优解:(p0/wo,p1/w1,p2/w2,p3/w3,p4/w4,p5/w5,p6/w6)=(10/2,5/3,15/5,7/7,6/1,18/4,3/1)(x

acm-一个简单的背包问题dp

问题描述 一个简单的背包问题dp 找不出状态转移方程 描述 一大堆期末考试来袭,草滩小王子被迫去上自习了. 除了自习,草滩小王子还想到了n件可以做的事,n件事可以选一些去做, 这些事会花费一定的时间并且必须一次完成不停止(本题中时间的最小单位为1秒) 并且可以提高(降低)草滩小王子自习的效率(神奇的是效率的提升是累加的), 草滩小王子一开始的效率只有1. 草滩小王子可以在任意时刻开始自习任意时间(效率不会因此降低),假设当前的效率为?ki?, 这段时间?ti内获得的收获?si=ti×ki?. 现

谁来拯救我? 他的外链少 排名比我好

虽然搞SEO的谈排名就像谈钱一样,给人一种很俗的感觉.不过俗话说的好,没钱寸步难行,没排名网站难以运营. "谁来拯救我?他的外链少,排名比我好."我可不是救世主,我只是一个小小SEO菜鸟,再此和大家交流一些对这种情况的一些见解,希望对大家有用. 现在互联网竞争激烈,个人站长想要生存,大多喜欢专注于某一个小的领域,选择指数较小的关键词来建站.即便是这样,也会遇到很多的竞争对手.我们经常看到排在前面的竞争对手的网站,区区10来个,上百个外链排在第一,而自己的网站上千的外链连首页都上不了.

流程图-简单算法分析与设计问题求解

问题描述 简单算法分析与设计问题求解 解决方案 第一题, 本质就是求最短路径, 可以参考Dijkstra算法来解决这道题 第二题, 就是背包问题, 只是换了个题目形式, 你可以参考背包问题, 和这道题是一样的...

背包问题

P01: 01背包问题 题目:有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路:这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放.用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值.则其状态转移方程便是: f[i][v] = max{ f[i-1][v], f[i-1][v-c[i]] + w[i]} 这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生

nsga2-关于NSGA2的使用---涉及到多目标01背包问题

问题描述 关于NSGA2的使用---涉及到多目标01背包问题 对于物品有3种属性,体积质量和价值,背包体积质量限定 但是我感觉NSGA2只能用来做简单地最大值问题..1.没法找到输入这3个属性的方法...2.对于舒适度函数没法确定...是否需要对这个01背包经行建模..但是建模应该是线性规划做的事情啊..

【算法导论】贪心算法之背包问题

        在讨论贪心算法时,我们先了解贪心算法与动态规划之间的区别与联系,后面我们将发现可以用0.1背包问题和部分背包问题来比较贪心算法和动态规划的关系.         我们知道,对于一个最优解问题,贪心算法不一定能够产生一个最优解.因为,如果想要采用贪心算法得到最优解需要满足两个条件:贪心选择性质.最优子结构.         贪心选择性质:一个全局最优解可以通过局部最优解来得到.that is to say,当考虑如何做选择时,我们只考虑对当前问题最佳的选择而不考虑子问题的结果.  

回溯法——求解0-1背包问题

         以前研究过一个简单的N皇后问题,对回溯法也有了个模糊的认识,大致理解就是:先一直做某件事,当完成某个条件时或者是触犯某个条件时,再返回到最近的一个类似还原点的地方.        在用回溯法求解0-1背包问题的时候,主要遇到三个相对难解决的问题:1,什么是界限函数:2,什么时候用它:3,回溯到哪儿.    什么是界限函数?         如下图:             当我们身在一棵搜索空间树中,站在一个K点举棋不定的时候,我们可以用它估算如果我们继续向下走,我们走完本段路