(闫氏dp分析法)AcWing 2. 01背包问题

简介: (闫氏dp分析法)AcWing 2. 01背包问题

题目链接

2. 01背包问题 - AcWing题库

一些话

切入点

求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。

输出最大价值。

0<N,V≤1000

0<vi,wi≤1000

1.求解某种符合题意的方案,而且是要最优方案,符合dp特征

2.数据范围在1e3内,属于dp的范畴


流程

闫氏dp分析法


分析问题分为状态表示和状态计算两部分


1.状态表示,思考用1维还是2维来储存数据,此题有物品,空间和价值三种数据要储存,所以宜选用2维


          状态表示后又分为集合和属性两部分


       1.1集合:二维数组f[i][j]表示一个怎样的集合? 01背包中表示物品的选法


               考虑前i个物品的情况下,背包容积还剩j时的最优解


       1.2属性:二维数组f[i][j]储存的数据是什么属性 maxn?minn?数目?此题储存的是maxn


(状态表示部分往往是靠经验来写而不是自己想出来的)


2.状态计算:


       将集合划分成子集合,来一层一层获取


       划分的依据是:最后一个不同的节点,如此题是f[i][j]选不选i,选和不选是两种结果


       每层的选与不选可以将集合划分为两个子集,没有遗漏。(求数量时还有遵循不重复的原则)


       选i,[i-1][j-v[i]] + w[i];


       不选[i-1][j];


最后按照分析的结果枚举每一层,输出f[n][m];

套路

ac代码

// 11:01~11:08
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
// f[i][j],考虑前i件物品,背包容量j时的价值
const int N = 1e3 + 10;
int f[N][N];
int v[N],w[N];
int n,m;
int main(){
    cin >> n >> m;
    for(int i = 1;i <= n;i++){
        cin >> v[i] >> w[i];
    }
    for(int i = 1;i <= n;i++){
        for(int j = 0;j <= m;j++){
            f[i][j] = f[i-1][j];
            if(v[i] <= j){
                f[i][j] = max(f[i][j],f[i-1][j-v[i]] + w[i]);
                //在纠结这里为什么是f[i-1][j-v[i]] + w[i],
                // 会纠结的根本原因是没明白f[i][j]的含义,考虑前i件物品,背包还剩下j空间时的最优解
                // 因为能选的物品都考虑过后才可能得到一个最优解,所以只有上一层i的数值是正确的,所以只能用f[i-1]的值,不能用f[i]的值
            }
        }
    }
    cout << f[n][m] << endl;
    return 0;
}
目录
相关文章
|
数据采集 监控 网络协议
【计算机网络】你真的懂学校的校园网吗?
在数字时代,计算机网络已经成为了现代社会不可或缺的一部分。而对于大多数人来说,校园网是我们日常生活中接触最频繁的网络之一,它为学校的师生提供了信息传输、资源共享和互联互通的基础设施。但是,尽管我们每天都在使用校园网,很少有人真正深入了解它的工作原理、安全性和管理细节。
5284 3
|
开发框架 安全 前端开发
使用Ruby on Rails进行快速Web开发
【5月更文挑战第27天】Ruby on Rails是一款基于Ruby的高效Web开发框架,以其快速开发、简洁优雅和强大的社区支持著称。遵循“约定优于配置”,Rails简化了开发流程,通过MVC架构保持代码清晰。安装Ruby和Rails后,可使用命令行工具创建项目、定义模型、控制器和视图,配置路由,并运行测试。借助Gem扩展功能,优化性能和确保安全性,Rails是快速构建高质量Web应用的理想选择。
|
Java Maven Windows
关于win11系统中环境变量path的显示和编辑格式变成一行的问题
关于win11系统中环境变量path的显示和编辑格式变成一行的问题
2226 0
关于win11系统中环境变量path的显示和编辑格式变成一行的问题
|
SQL NoSQL Java
SQL查询引擎原理浅析
# SQL的诞生 SQL英文全称是Structured Query Language,中文名即结构化查询语言,是一门专门用来查询数据的声明式编程语言。 我先解释一下声明式语言的概念,编程语言有两个分类: * 命令式:手把手教机器做事情 * 声明式:告诉机器任务,让它自己想办法解决 举个例子,假设你家里有机器人,你想让它帮忙拿一个在客厅桌子上的白色杯子给你。 如果用命令式编程的方
805 0
SQL查询引擎原理浅析
|
消息中间件 缓存 算法
社招一年半面经分享(含阿里美团头条京东滴滴)
重点放在专业技能和项目经验两块1.你的简历就是你给面试官提供的考点,简历上的东西必须自己Hold住,万一自己写的东西被问住了,会很尴尬,给面试官留下的印象也不好,所以就是会啥写啥2.技术栈最好不要写精通,你敢写面试官就敢问,被问倒了很尴尬的,写熟悉,了解就行怎么投简历我这里强烈建议找人内推,这样简历通过的概率大些,如果找不到,可以试试脉脉,我就是从脉脉投的简历,把状态改成寻找机会就行,会有很多人找你的推荐一个简历制作模版,我一直用的,https://www.polebrief.com/index算法这个该刷还是得刷,别偷懒,我个人感觉刷完下面几个已经够了,大家可以根据自己的基础情况选择剑指Of
1046 1
|
Web App开发 移动开发 前端开发
b 站, 掘金都在用的 webp 是什么?怎么用?
如果你现在用 PC 端浏览器看这篇文章,不妨打开控制台,cltr + c 一下去看下掘金图片的后缀/格式究竟是什么?
|
存储 索引 NoSQL
二叉堆与自定义优先队列实现删除任意元素
二叉堆与自定义优先队列实现删除任意元素
|
算法 测试技术 编译器
【算法】优先队列式分支限界法,以01背包问题为例
📑 例题:01背包问题 题目链接:采药-洛谷 当洛谷上不让下载测试用例,可以试试:采药-ACWing
1623 0
|
并行计算
Hint: This means that multiple copies of the OpenMP runtime have been linked into the program.
Hint: This means that multiple copies of the OpenMP runtime have been linked into the program.
549 0
|
算法
算法设计与分析/数据结构与算法实验7:0-1背包问题(分支限界法)
算法设计与分析/数据结构与算法实验7:0-1背包问题(分支限界法)
369 0
算法设计与分析/数据结构与算法实验7:0-1背包问题(分支限界法)