背包问题动态规划

1027阅读 0评论2011-08-12 hnney
分类:Python/Ruby

  1. import sys
  2. (M,N) = map(int, sys.stdin.readline().strip().split(',')) #容量,物品个数
  3. w = map(int, sys.stdin.readline().strip().split(',')) #容量
  4. v = map(int, sys.stdin.readline().strip().split(',')) #价值
  5. f = (M 1)*[-1] #f[i] 表示容量还剩i的情况下所能承载的最大价值
  6. #自底向上
    for k in range(M 1):
        max = 0
        for i in range(N):
            sp = k-w[i]
            if sp >=0:
                if v[i] f[sp] > max:
                    max = v[i] f[sp]
        print k,max
        f[k] = max
    print f[M]
    sys.exit(0)
    """
  7. #自顶向下
  8. def F(n):
  9.     max = 0
  10.     for i in range(N):
  11.         sp = n - w[i]
  12.         if sp >= 0:
  13.             if f[sp] >= 0:
  14.                 t = v[i] f[sp]
  15.             else:
  16.                 t = v[i] F(sp)
  17.             if t>max:
  18.                 max=t
  19.     f[n] = max
  20.     return max
  21. F(M)
  22. max=0
  23. for i in f:
  24.     if i > max:
  25.         max = i
  26. print max
上一篇:背包问题动态规划
下一篇:Log4cxx配置