最基本的01背包问题

1

使用动态规划,dp[i][j]存储:到第i个物品时,空间大小为j的情况下的最大价值

转移方程是:dp[i][j] = max(dp[i-1][j],dp[i-1][j - weight[i]] + value[i])

时间复杂度是O(NV),N为物品的个数,V为最大容量,空间复杂度为O(NV)

#include<iostream>
using namespace std;const int N = 5;
const int volumn = 1000;
int dp[N + 1][volumn + 1];
const int value[N+1] = {0,8,10,4,5,5};//下标从1开始
const int weight[N+1] = {0,600,400,200,200,300};//下标从1开始void dp_01()
{for(int i = 1; i <= N; i++)for(int j = 1; j <= volumn; j++){if(j >= weight[i])dp[i][j] = max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i]);elsedp[i][j] = dp[i-1][j];}cout << dp[N][volumn]<<endl;
}
int main()
{dp_01();return 0;
}

2 简化空间复杂度的01背包解法:

使用一维空间f[volumn+1],来替代dp[][]。

View Code

#include<stdio.h>
#include<iostream>
#include<limits.h>
using namespace std;const int T = 5;
const int V = 10;
int f[V + 1];
int W[T] = {8,10,4,5,5};
int C[T] = {6,4,2,2,3};
int max(const int& a, const int& b)
{return a >= b ? a:b;
}
void package()
{freopen("out.txt","w",stdout);//initfor(int i = 1; i <= V; i++){f[i] = INT_MIN;//必须装满的情况//f[i] = 0;//可以不装满的情况
    }f[0] = 0;for(int i = 0; i < T; i ++){for(int v = V; v >= C[i]; v--){f[v] = max(f[v-C[i]] + W[i],f[v]);}}cout << f[V] << endl;
}
int main()
{package();return 0;
}

posted on 2013-05-04 17:40 T000ny 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/majianbin/archive/2013/05/04/3059739.html

最基本的01背包问题相关推荐

  1. ACM1881 01背包问题应用

    01背包问题动态规划应用 acm1881毕业bg 将必须离开的时间限制看作背包容量,先将他们由小到大排序,然后在排完序的数组中对每个实例都从它的时间限制开始(背包容量)到它的延长时间进行遍历: 1 # ...

  2. c语言-01背包问题

    01背包问题 问题:有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 分析: 这是最基础的背包问题,特点是:每种物品仅有一件,可以选 ...

  3. 三十四、动态规划解决01背包问题

    一.动态规划算法介绍 动态规划算法的核心思想是:将大问题划分为小问题进行解决,从而一步一步获取最优解的处理算法. 动态规划算法与分治算法类似,其基本思想是将待求解的问题分解成若干个子问题,先求子问题, ...

  4. python 回溯法 子集树模板 系列 —— 3、0-1背包问题

    问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入背包的物品,使得放入背包的物品的总价值为最大? 分析 显然,放入背包的物品,是N个物品的所有子集的其 ...

  5. poj3624 Charm Bracelet DP 01背包问题

    题目链接:http://poj.org/problem?id=3624 01背包问题,接触DP的第一题. 1 ///2014.4.10 2 ///poj3624 3 4 #include <io ...

  6. 【基础算法复习】01背包问题(一)

    一.绪论 01背包问题是一个经典的动态规划问题,问题描述为"有n个物品,其价值分别为v[n],要求将其装在承重为m的背包,每个物品只能装一次的情况下,在不超过承重的范围下价值最大" ...

  7. C++~回溯+贪心法解决01背包问题

    C++~回溯+贪心法解决01背包问题 参考文章: (1)C++~回溯+贪心法解决01背包问题 (2)https://www.cnblogs.com/rimochiko/p/8168638.html 备 ...

  8. 0-1背包问题 动态规划java_C#使用动态规划解决0-1背包问题实例分析

    // 利用动态规划解决0-1背包问题 using System; using System.Collections.Generic; using System.Linq; using System.T ...

  9. 算法导论——动态规划:0-1背包问题(完全解)

    2019独角兽企业重金招聘Python工程师标准>>> package org.loda.dynamic;import org.junit.Test;/*** * @ClassNam ...

  10. 动态规划之 0-1背包问题及改进

    有N件物品和一个容量为V的背包.第i件物品的重量是w[i],价值是v[i].求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大.在选择装入背包的物品时,对于每种物品i,只能选择 ...

最新文章

  1. 谷歌应用引擎新增PHP支持
  2. LeetCode第110题 平衡二叉树
  3. EOJ_1070_下落的小球
  4. 机器学习 文本分类 代码_无需担心机器学习-如何在少于10行代码中对文本进行分类
  5. 牛客NOIP2021提高组OI赛前模拟赛第一场T3——与巨(数学)
  6. antd form rules字数限制_Package - antd-form-rules
  7. TIOBE 6 月编程语言排行榜:Python 势不可挡,或在四年之内超越 Java、C
  8. vue添加滚动事件,解决简书Carol_笑一笑方案中vue移除滚动事件失效的问题
  9. 【聚类分析】基于matlab交通干道车流量FCM聚类分析及预测【含Matlab源码 1141期】
  10. 【元胞自动机】基于matlab元胞自动机四车道交通流【含Matlab源码 039期】
  11. CondaHTTPError: HTTP 000 CONNECTION FAILED for url ...... 解决过程
  12. 对js运算符“||”和“”的总结
  13. 怎样用eclipse新建一个android项目?用eclipse新建android项目出错?请看下面
  14. 高频直流电源在整改、降压和作用方面解决方案
  15. 【身份证识别】基于matlab GUI形态学二代身份证号码识别系统【含Matlab源码 948期】
  16. 【精美前端模板】你还不心动吗?
  17. 【JS】使用jQuery制作图片手风琴效果
  18. 如何翻译DeepFaceLab(DeepFake)的交互式合成器
  19. 高级语言程序设计(实验四)
  20. iqc工作职责和工作内容_iqc是什么意思 iqc的工作职责是什么

热门文章

  1. U盘安装CentOS7的最终解决方案
  2. 如何获取Java用户输入?
  3. 设置HttpClient的授权标头
  4. jQuery:ajax调用成功后返回数据
  5. Android错误:无法在设备上安装* .apk *:超时
  6. 如何列出引用SQL Server中给定表的所有外键?
  7. win11不显示缩略图怎么办 windows11不显示缩略图的解决方法
  8. win11更新特别慢怎么办 windows11更新缓慢的解决方法
  9. win11多桌面功能怎么使用 win11多桌面设置步骤
  10. window.open打开页面并传值,window. location.search遍历获取到的请求链接中的所有参数