码迷,mamicode.com
首页 > 其他好文 > 详细

0-1背包问题

时间:2017-04-07 23:34:18      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:class   img   str   ··   ges   优化   alt   ret   开始   

【问题】

有一个贼在偷窃一家商店时发现有N件物品;第i件物品值pi元,重wi磅(1≤i≤N),且都是整数。

他希望带走的东西越值钱越好,但他的背包中最多能装下M磅的东西(整数)。

如果每件物品或被带走或被留下,小偷应该带走哪几样东西?

【算法解析】

令f(i,y) 表示容量为y,物品i,i+1,···,n 的优化效益值,按优化原理可列递归关系如下:

技术分享

技术分享

初始背包问题的递归方程
f(1,c)=max{f(2,c), f(2,c-w1)+p1}
迭代
计算从f(n, *)开始((1)式)
然后应用(2)式递归计算f(i,*) ( i=n-1,n-2,···,2 ),
最后得出 f(1,c)

 

【代码】

(1)递归解法:

#include <iostream>

using namespace std;

const int n=3;
int w[n]={100,14,10};
int p[n]={20,18,15};

int F(int i, int y)
{
   if (i == n) return (y < w[n]) ? 0 : p[n];
   if (y < w[i]) return F(i+1,y);
   return max(F(i+1,y), F(i+1,y-w[i]) + p[i]);
}

int main() {
    cout<<F(0,116);
    return 0;
}

 

0-1背包问题

标签:class   img   str   ··   ges   优化   alt   ret   开始   

原文地址:http://www.cnblogs.com/wxgblog/p/0-1beibaowenti.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!