http://www.cnblogs.com/eastjade/archive/2011/06/22/2086828.html
算法的讨论,大家帮忙推荐一下,也来参与一下:)
cnblogs 首页讨论有一堆木棒长度在 1m - 21m之间(长度为整数),用户拥有的木棒长度也是用户自定义,的数量用户自定义
其中的一组样例数据是10m 的木棒 300跟, 14m 的木棒223跟, 18m 的木棒412跟, 2米的木棒301跟, 5米的木棒 48跟
我要求的是,这些木棒最多可以组成多少个 21米长的木棒?(木棒不可以切割,只可以拼接)。

解决方案 »

  1.   


    我举的例子已经是一个很简单的例子了,但是如果完全不减枝,只用最普通的穷举,已经超过double的长度了,所以的确很麻烦
      

  2.   

    例子是48个21 必须要奇数 5 剩下16:
    1、14+2
    2、10+2+2+2
    如果 5m 的是 480 根,就更难了10m 的木棒 300跟, 14m 的木棒223跟, 18m 的木棒412跟, 2米的木棒301跟, 5米的木棒 480跟1、5+14+2:  223 
    2m 的剩 301-223 = 78
    78/3 = 26有: 249
    举例道还好算。
    都不定,就很麻烦了
      

  3.   

    这个真心求的是算法,不是结果 
    我的长度优先原则算法
    http://www.cnblogs.com/52x/archive/2011/06/22/2087389.html 大家可以看看
      

  4.   

    lz的这个问题看似简单,实际上却是np的,也就是说求最优解没有有效的方法,快速求解只能采用近似算法。比如lz自己琢磨的长度优先原则算法,也许在某些情况下就可以求得一个不错的解,甚至是最优解,但可以确定的是,不会在所有情况下都能求得最优解。此外,就像13楼所说,线性规划可以求解,不过也是NP的,前提是先用搜索枚举的方法,求出全部满足长度为21的可行方案。再根据这些方案联立线性方程,然后再求解,虽说是NP的,但据说用单纯形法求解的效率还是不错的(比较坏的情况下,线性方程的个数都会有上万个,那是无论如何也快不了),我自己也没写过,如果lz怕麻烦的话可以用lingo试试。