zoukankan      html  css  js  c++  java
  • 01背包

    以前在acm课上也讲过一些关于背包的题,不过那些比较简单,就是简单的贪心问题,先排个序再处理就完了,而01背包,感觉就是比那个上了一个难度的问题,这个需要遍历然后找其中合适的,简单原理就是这样。

    例如:现在有容量为m的背包,还有重量为w,价值为v的k个不同的商品,问怎样买才能使价值最大化?

      思路:如果是贪心问题就是直接将商品按价格从大到小排序,然后依次买,显然这样是错的,我们要在容量范围内尽量买价值高的,有时候是买到恰好容量满,这时候价值最大化。

    直接dp遍历找:

    memset(d,0,sizeof(d));   /初始化为0.

    for(int i=0;i<k;i++)   /共k个商品

    for(int j=m;j>=w[i];j--)/d[j]表示容量为j时,背包的最大价值为d[j]

    d[j]=max(d[j],d[j-w[i]]+v[i]); /进行比较选择买和不买时造成的价值

    cout<<d[m]<<endl;  /输出容量为m时的最大价值

    简单的01背包模板就是上边的,碰到类似的这类题改改就好了

    这个模板是递推型的,还有递归的,然而那个比较长,一般都用递推的这个。

    学姐给的练习题有些是先进行排序处理的,有些是需要你自己把题意转化为01背包的问题,就如那个抢银行概率问题。

    练习题网址:

    01背包练习题链接http://acm.hust.edu.cn/vjudge/contest/126172#overview

    密码都是nefu
    待续……
  • 相关阅读:
    Notes of the scrum meeting(12.7)
    Notes of the scrum meeting(12.5)
    事后分析报告(M1阶段)
    锁屏软件发布说明
    Android 锁屏软件MemoryDebris测试报告
    锁屏软件功能介绍
    Notes of the scrum meeting(11/4)
    Notes of the scrum meeting(11/3)
    Notes of the scrum meeting(11/2)
    SCRUM 12.17
  • 原文地址:https://www.cnblogs.com/llsq/p/5808459.html
Copyright © 2011-2022 走看看