题意:

往手镯上镶嵌宝石,手镯总重量有上限,要求手镯的总价值最大。

本质就是一个01背包问题。

解题思路:

下面开始分析01背包问题。

动态规划问题主要是找到子问题,即一旦确定了第i个状态,就可以直接推出第i+1个状态。(有后效性)

以题目给出的数据举例:

  4 6     n     m
① 1 4    w[i]  v[i]
② 2 6
③ 3 12
④ 2 7

设F[j]为背包剩余容积为j时背包所能达到的最大价值。(j <= m)

取①号物体时,如果j < 1,则F[0] = 0,如果j >= 1时,F[1]=F[2]=...=F[6]=4;

取②号物体时,如果j < 2,则F[1]保持不变,仍为4;

如果j >= 2,则可以选择取或者不取②号物体,因此F[j] = max(F[j],F[ j-w[i] ]+v[i]);(如下所示)

取:F[2] = F[ j-w[i] ]+v[i] = F[0]+v[2]=0+6=6;

F[3] = F[ j-w[i] ]+v[i] = F[1]+v[2]=4+6=10;

F[4] = F[ j-w[i] ]+v[i] = F[2]+v[2]=4+6=10;...F[5]=F[6]=10;

不取:F[1]=F[2]=...=F[6]=4;

因此F[j]=max(取,不取)=max(F[j],F[ j-w[i] ]+v[i]);

取③号物体...取④号物体,依次类推

下面是代码实现:

#include <cstdio>
#include <algorithm>using namespace std;int w[3410],v[3410]; //记录各个物体的重量和价值
int f[12900];        //记录当背包剩余重量为j时的背包最大价值int main()
{int n,m;//n是个数,m是最大重量scanf("%d%d",&n,&m);for(int i = 0;i < n;i++){scanf("%d%d",&w[i],&v[i]);  } for(int i = 0;i < n;i++){for(int j = m;j >= 1;j--){if(j >= w[i]){f[j] = max(f[j],f[j-w[i]]+v[i]);//取还是不取 } }}sort(f,f+m+1);printf("%d\n",f[m]);return 0;
} 

POJ - 3624 (01背包问题)(动态规划-滚动数组)相关推荐

  1. 代码随想录算法训练营day41 | 动态规划 01背包问题基础 01背包问题之滚动数组

    day41 01背包问题基础 问题描述 举个栗子 二维dp数组01背包 1.确定dp数组以及下标的含义 2.确定递推公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp数组 01背包问题之 ...

  2. 【动态规划】01背包问题(滚动数组 + 手画图解)

    01背包除了可以用形象的二维动态数组表示外,还可以使用空间复杂度更低的一维滚动数组. 目录 文章目录 前言 一.滚动数组的基本理解 二.确定dp及其下标含义 三.确定递推公式 四.确定初始化 五.确定 ...

  3. 01背包问题动态规划(二维数组)

    01背包问题动态规划(二维数组) 问题描述 ​ 一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,-,Wn,它们的价值分别为C1,C2,-,Cn,求旅行者能获得 ...

  4. 0-1背包问题的一维数组优化解析

    [问题描述] 常见的0-1背包问题,多使用二维数组来实现.二维数组实现时,常用的状态转移方程为: c[i][j]=c[i-1][j], j<vol[i] c[i][j]=max(c[i-1][j ...

  5. 背包问题动态规划matlab,01背包问题动态规划详解

    计算机算法分析考试:动态规划0-1背包问题,怎么算她说她没醉,却一直摇摇晃晃掉眼泪:你说你爱她,却从未想过给她一个家. 要考试了,老师给划重点有一题:动态规划0-1背包问题,怎么算. 怎么理问题描述: ...

  6. 01背包问题 动态规划 java实现 简单通俗易懂

    ** 01背包问题 动态规划 ** 1.动态规划 什么是动态规划?动态规划就是将一个大问题不断向下拆分成小问题,直到拆分出的小问题可以求出其解,然后将小问题的解不断的向上合并,最终得到大问题的解决方案 ...

  7. 守望者的逃离 动态规划+滚动数组

    题目: 恶魔猎手尤迪安野心勃勃.他背叛了暗夜精灵,率深藏在海底的那加企图叛变:守望者在与尤迪安的交锋中遭遇了围杀.被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去 ...

  8. 动态规划/滚动数组/通项公式——爬楼梯

    一.题目 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 二.思路解析 1.迭代 第n个台阶只能从第n-1或者n-2个上来.到第 ...

  9. 0-1背包问题动态规划模型的Python解法

    0-1背包问题动态规划模型的Python解法 1.01背包问题 2.Python解决方案 3.01背包问题例题 1.01背包问题 背包问题(Knapsack problem)是一种组合优化的NP完全问 ...

  10. 【LeetCode笔记】494. 目标和(Java、动态规划、背包问题、滚动数组)

    文章目录 题目描述 思路 && 代码 1. 动态规划 O(n2n^2n2).O(n2n^2n2)(最方便理解,初版) 2. 转换成 01 背包问题 O(n2n^2n2).O(nnn) ...

最新文章

  1. 漫画:臭长臭长的高频贪心面试题
  2. 8个可以提高数据科学工作效率、节省宝贵时间的Python库
  3. BZOJ3139/BZOJ1306 HNOI2013比赛/CQOI2009循环赛(搜索)
  4. 下面由我来给大家表演个绝活
  5. eclipse 输入卡顿_7个小技巧,解决eclipse卡顿问题
  6. HTTP header location 重定向 URL
  7. excel和mysql php_php将mysql数据库和Excel相互导入和导出的方法
  8. 开启弹窗_烦人的电脑弹窗怎样关闭?4种方法还你干净桌面
  9. 哈里王子启动可持续旅行倡议 携程作为创始成员入选
  10. 数据:BTC全网算力为134.40 EH/s,新增地址数54.03万
  11. Don't Panic! KRACK 没你想象的那么糟
  12. 汇川,H3U,plc程序模板和触摸屏程序模板,三个步进和三个伺服,三个伺服用的是canlink总线,适用于运动轴控制
  13. turtle库绘图:绘制QQ所有表情
  14. 敏捷开发框架—Scrum
  15. 五分钟内用Python实现GitHook
  16. 人工智能是否将拥有人类意识?
  17. gt-itm模型生成拓扑结构
  18. HTML简约导航源码
  19. zed驱动的安装 及 遇到问题 及 ros标定
  20. 融云 SDK 集成详解 – Android Studio

热门文章

  1. Eclipse手动添加dtd文件使xml能自动提示
  2. php cookbook怎么样,《PHP Cookbook》学习笔记(三)
  3. 细节模拟题:素数回文
  4. atol、atoll、atof函数
  5. go插件 vscode 报错_win10环境下配置golang+vscode【解决install failed情况】
  6. c语言递归1到10联程,为什么这个递归能输出1到10
  7. linux下回收站在哪个文件夹,linux回收站在哪里
  8. 荒野大镖客fc java_FC荒野大镖客无敌版
  9. python 根据关键字 切割pdf_用python拆分pdf
  10. swagger 上传文件 参数_跟我一起学.NetCore之Swagger让前后端不再烦恼及界面自定义...