`

背包算法

    博客分类:
  • java
阅读更多
/**
 * 背包问题
 * 背包问题是计算机科学里的经典问题。在最简单的形式中,包括试图将不同重量的数据项放到
 * 背包中.以使背包最后达到指定的总重量。不需要把所有的选项都放入背包中。
 * 举例来说,假设想要背包精确地承重20磅,并且有5个可以选择放入的数据项,它们的重量
 * 依次为11磅、8磅、7磅、6磅和5磅。对于选择放入的数据项数量不大时,人类很善于通过观察
 * 就可以解决这个问题。于是大概可以计算出只有8磅、7磅和5磅的数据项加在一起和为20磅。
 * 如果想要计算机来解决这个问题,就需要给计算机更详细的指令。算法如下:
 * 1.如果在这个过程中的任何时刻,选择的数据项的总和符合目标重量,工作就完成了。
 * 2.从选择第一个数据项开始。剩余的数据项的加和必须符合背包的目标重量减去第一个数据  
 *     项的重量;这是一个新的目标重量。
 * 3.逐个地试每种剩余数据顶组合的可能性。但是,注意并不需要去试所有的组合,因为只要  
 *     数据顶朗和大于目标重量的时候,就停止添加数据项。
 * 4.如果设有组合合适的话,放弃第—‘个数据项,并且从第二个数据项开始再重复一边整个  
 *     过程。
 * 5.继续从第三个数据项开始,如此下去直到你已经试过所有的组合,这时知道没有解决答案  
 *     。
 *     在刚刚描述的这个例子中,从11开始。现在想要剩余的数据项和为9(20减去u)。对于9,
 *     从很小的8开始。现在想要剩余的数据项和为1(9减去8)。从7开始,但是它大于L,于是尝  
 *     试6,然后试5*它们都太大了d现在已经试过了所有的数据项,所以知道包含8的任何组合   
 *     和都不可能为9。接着尝试7,于是现在开始找的目标为2(9减去7)。
 *
 */
public class Beibao{
     static int[] a=new int[5]; //背包重量
     static int[] b=new int[5]; //结果数组
     static int flag=0;          //下一个候选项
   
     static int bound=20;        //总重量
     static int totle=0;         //每次选择后的总重量
    
     public static void inserttry(int i,int leftbound,int t){
        if(i<5&&leftbound<=totle){
            if(a[i]<leftbound){
                    b[t++]=a[i];
                    totle=totle-a[i];
                  
                    leftbound=leftbound-a[i];
                    i++;
                    inserttry(i,leftbound,t);
          }
        else if(a[i]>leftbound){
                    totle=totle-a[i];
                    i++;
                    inserttry(i,leftbound,t);
                    }
              else {
                     b[t]=a[i];
                     return;
               }
          }
             else    {
                      
                       leftbound=leftbound+b[--t];
                      
                      
                       for(int f=0;f<5;f++)
                        {
                            if (a[f]==b[t]) {flag=++f; break;}
                        }
                     
                       b[t]=0;
                     
                       totle=0;
                       for(int m=flag;m<5;m++)
                       {    totle+=a[m];
                       }
                      inserttry(flag,leftbound,t);
                   
                     }
       
             return;
         }
       public static void main(String[] args){
            a[0]=11;
            a[1]=8;
            a[2]=6;
            a[3]=7;
            a[4]=5;
           
            for(int i=0;i<5;i++) { b[i]=0;}
            for(int i=0;i<5;i++) {
                 totle+=a[i];
            }
           
            inserttry(0,20,0); 
            for(int i=0;i<5;i++){
               System.out.println(b[i]);
              } 
           }
}  

 

分享到:
评论
1 楼 mars914 2011-11-10  
第二个else 里执行会出错的吧,博主怎么考虑这一点的?

相关推荐

    java背包算法例子

    原先在网上找到某位大虾写的一个简单的背包算法,于是在其基础上改成适合我们目前项目中要求的背包算法。此算法要求传入一组对象集合(其中的对象中只包含主键和值)和某个条件值,然后能打印sum(对象.值)条件的1个...

    基于0-1背包算法的社交网络行为隐写术.docx

    基于0-1背包算法的社交网络行为隐写术 本文提出了一种基于0-1背包算法的社交网络行为隐写术,以解决传统隐写术的安全性问题。该方法通过引入0-1背包人员分配协议,降低了发送者和接收者有较多的共同好友这一限制...

    各种背包算法详解

    **背包算法详解** 在计算机科学和算法设计中,背包问题是一种经典的优化问题,它源于组合优化和图论领域。背包问题通常与资源分配、决策分析和最优化策略相关,广泛应用于项目管理、库存控制、软件工程等多个领域。...

    背包算法JAVA实现

    背包算法 背包算法JAVA实现 背包算法JAVA实现

    Java背包算法规划求解

    Java背包算法规划求解是一种经典的优化问题,常用于解决资源有限条件下的最大化效益问题。在给定的场景中,我们有n种商品,每种商品只有一个,并且有200块钱去购物,目标是使购买的商品总价值最大。这个问题可以抽象...

    pack.rar_背包_背包算法_背包算法 matlab_背包算法MATLAB

    【标题】"pack.rar_背包_背包算法_背包算法 MATLAB_背包算法MATLAB" 提供了一个关于使用MATLAB实现背包问题算法的详细资料。背包问题是一个经典的优化问题,广泛应用于资源分配、决策制定等领域。在这里,我们将深入...

    背包问题.rar_matlab算法实现背包问题_价值背包算法_背包最大价值_背包问题_遗传算法 背包

    三、价值背包算法 在本项目中,我们特别关注价值背包问题,即每个物品的价值和重量不等。在选择物品时,不仅考虑其重量,还要考虑其对整体价值的贡献。通过遗传算法,我们能够平衡重量限制与价值最大化的关系,找到...

    C++ 编写的背包算法程序 动态规划

    C++编写的背包算法程序 cpp 动态规划

    0-1背包算法代码实现

    0-1背包算法的目的是在不超过背包总承重的情况下,选择物品以最大化总价值。 本文将详细介绍0-1背包问题的解决方案,并提供C++代码实现,以便读者理解并运行验证。 首先,我们需要定义物品的基本结构,包括其重量...

    baglock_密码学背包算法_pridebt1_

    综合以上信息,我们可以了解到这是一套用C++编写的密码学程序,实现了背包算法,可能是为了加密或解密目的。要深入理解这个算法的工作原理和用途,我们需要查看`baglock.cpp`源代码,并结合密码学理论来分析其加密...

    背包 背包问题 背包算法

    在IT领域,背包问题是一种经典的优化问题,常用于解决资源有限条件下的决策优化。这个问题源自于实际生活中的各种场景,...对于学生和爱好者而言,深入理解并熟练应用背包算法,无疑会增强他们在信息技术领域的竞争力。

    PHP 01背包算法

    用 PHP 实现的 01 背包算法,参考了网上的相关 C++ 算法,用来方便 PHP 程序员改造使用,我是用它来实现在指定宽度的栏中整齐的排列一堆标签云,效果非凡且神奇,初次使用时一瞬间的确有这样的感觉。

    背包算法经典

    ### 背包算法经典:深入解析背包九讲 #### 第一讲:01背包问题 **知识点概览**:01背包问题是最基础的背包问题类型,涉及到的每种物品仅有一件,且每件物品只能选择放入背包或不放入背包。此问题通过动态规划方法...

    C++实现回溯算法 0 1 背包算法

    C++实现回溯算法 0 1 背包算法 本文将详细介绍 C++ 实现回溯算法 0 1 背包算法的知识点。 首先,需要了解背包问题的定义。背包问题是指在有限容量的背包中,如何选择物品以达到最大价值的优化问题。在这里,我们...

    分支界限思想解0-1背包算法

    它描述的是这样的场景:我们有一组物品,每种物品都有一个重量和价值,我们需要选择一部分物品放入一个容量有限的背包中,使得放入背包的物品总重量不超过背包的容量,同时使这些物品的总价值最大。0-1背包问题的...

    0-1背包及部分背包算法实验

    0-1背包问题和部分背包问题是运筹学和计算机科学中的经典优化问题,它们在资源分配、任务调度、投资决策等多个领域有广泛应用。本实验主要关注这两种问题的算法实现,特别是动态规划和贪心策略。 0-1背包问题源于一...

    0-1背包算法(动态规划)

    0-1背包问题是一种经典的组合优化问题,在计算机科学和运筹学中有着广泛的应用。...在实际编程中,可以使用Python、Java等编程语言实现这个算法,并通过输入不同的物品和背包承重,测试算法的正确性和效率。

    C++代码背包算法

    【C++代码背包算法】 在计算机科学中,背包问题(Knapsack Problem)是一类经典的组合优化问题。它源于实际生活中的物品装箱问题,旨在确定如何选择物品以最大化价值,同时不超过容器(背包)的最大容量限制。背包...

    python 编写的背包算法

    输入物品数量n,报的容量m,每个物品的体积,每个物品的价值 输入:最大价值

    01背包算法 C语言代码

    01背包问题算法 动态规划 代码 01背包问题算法 动态规划 代码 01背包问题算法 动态规划 代码

Global site tag (gtag.js) - Google Analytics