背包问题(比较简单的算法)

背包问题

小偷有一个包,容积有限,偷东西,东西有重量和价值,要求偷的价值最大。
这是一个典型的动态规划问题。比起递归呢,通过预存数组记录每次结果,避免了重复计算,
也算是牺牲了空间来换取时间,降低复杂度。

1、重复背包问题: 每种物品有无限个,任意取:
框架:

int k[weight+1]={0};   //包容积为weight的最大价值,先全初始化为0

for(int i=1;i<weight+1;i++)     包容积递增:1~~weight   递增至最终容积
{
    for(int j=0;j<item;j++)           进行产品遍历,看当前容积哪些产品放得下
    {
        if(i>=w[j]) k[i]= ( k[i-w[j]]+v[j] )>k[i] ? ( k[i-w[j]]+v[j] ) : k[i] ;    
         //如果放的下,就进行比较,看放不放、放哪一件时价值最大,不断比较
    }
}

代码:

#include<iostream>
using namespace std;
int main()
{
    int weight,item;           //weight是包的容积  item是物品件数
    cout<<"intput the number of items:";
    cin>>item;
    cout<<"input the weight of bag:";
    cin>&
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值