Chinaunix首页 | 论坛 | 博客
  • 博客访问: 618625
  • 博文数量: 172
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 1252
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-29 22:26
文章分类

全部博文(172)

文章存档

2011年(6)

2010年(7)

2009年(159)

我的朋友

分类: LINUX

2009-11-10 23:20:04

问题描述:有不同大小于价值的物品,现只有一个容积为M的背包来装物品。请找出一种最优组合是价值最大化。

递归实现:

int knap(int cap)
{
  int i, space, max, t;
  for (i = 0, max = 0; i < N; i++)
    if ((space = cap-items[i].size) >= 0)
      if ((t = knap(space) + items[i].val) > max)
    max = t;
  return max;
}


动态规划实现:

int knap(int M)
{
  int i, space, max, maxi, t;
  if (maxKnown[M] != unknown) return maxKnown[M];
  for (i = 0, max = 0; i < N; i++)
    if ((space = M-items[i].size) >= 0)
      if ((t = knap(space) + items[i].val) > max)
    { max = t; maxi = i; }
  maxKnown[M] = max; itemKnown[M] = items[maxi];
  return max;
}


阅读(2016) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~