【算法|动态规划 | 01背包问题No.1】AcWing 426. 开心的金明

news/2024/10/21 7:41:25/

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【手撕算法系列专栏】【AcWing算法提高学习专栏】
🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助
🍓希望我们一起努力、成长,共同进步。
在这里插入图片描述

原题链接:点击直接跳转到该题目

目录

  • 1️⃣题目描述
  • 2️⃣题目解析
  • 3️⃣解题代码

1️⃣题目描述

在这里插入图片描述
在这里插入图片描述

2️⃣题目解析

状态表示:dp[i][j]表示从前i个物品中进行挑选且总价钱不超过j的情况下,价格与重要度的乘积的总和的最大值。

状态转移方程:

  • 选择第i件物品:dp[i][j] = dp[i - 1][j]
  • 不选择第i件物品(前提是j >= V[i]):dp[i][j] = dp[i - 1][j - V[i]] + V[i] * W[i]

注意可以使用滚动数组进行空间优化,填表时需要从右往左进行填表。

3️⃣解题代码

朴素算法:

#include<iostream>
using namespace std;const int M = 26;
const int N = 30000;
int dp[M][N],V[M],W[M];int main()
{int n,m;cin >> n >> m;for(int i = 1;i <= n;i++) cin >> V[i] >> W[i];for(int i = 1;i <= m;i++){for(int j = 1;j <= n;j++){dp[i][j] = dp[i - 1][j];if(j - V[i] >= 0) dp[i][j] = max(dp[i][j],dp[i - 1][j - V[i]] + V[i] * W[i]);}}cout << dp[m][n] << endl;
}

滚动数组进行空间优化代码:

#include<iostream>
using namespace std;const int M = 26;
const int N = 30000;
int dp[N],V[M],W[M];int main()
{int n,m;cin >> n >> m;for(int i = 1;i <= n;i++) cin >> V[i] >> W[i];for(int i = 1;i <= m;i++){for(int j = n;j >= V[i];j--){dp[j] = max(dp[j],dp[j - V[i]] + V[i] * W[i]);}}cout << dp[n] << endl;
}

http://www.ppmy.cn/news/1184051.html

相关文章

红队专题-从零开始VC++C/S远程控制软件RAT-MFC-远控介绍及界面编写

红队专题 招募六边形战士队员[1]远控介绍及界面编写1.远程控制软件演示及教程简要说明主程序可执行程序 服务端生成器主机上线服务端程序 和 服务文件管理CMD进程服务自启动主程序主对话框操作菜单列表框配置信息 多线程操作非模式对话框 2.环境&#xff1a;3.界面编程新建项目…

瀑布模型和敏捷开发

软件的生命周期自从应用程序的上线和发版之后服务于客户。程序员进入公司的项目组之后所接触到的系统项目有二次开发中和从零开始搭建的项目。项目有项目组的开发和验收周期。软件的设计模式遵循瀑布模型和敏捷开发。瀑布模型的软件设计模式在项目的一开始的搭建组成阶段需要招…

python随手小练10(南农作业题)

题目1&#xff1a; 编写程序&#xff0c;输出1~1000之间所有能被4整除&#xff0c;但是不能被5整除的数 具体操作&#xff1a; for i in range(1,1000): #循环遍历1~999&#xff0c;因为range是左闭右开if (i % 4 0) and (i % 5 ! 0) :print(i) 结果展示&#xff1a; 题目2&…

深度学习使用Keras进行多分类

之前的文章介绍了使用Keras解决二分类问题。那么对于多分类问题该怎么解决?本文介绍利用深度学习----Keras进行多分类。 1. 准备数据集 为了演示,本次选用了博文keras系列︱图像多分类训练与利用bottleneck features进行微调(三)中提到的数据集,原始的数据集将所有类别的…

【实用网站分享】

1、PyDebloatX https://pydebloatx.com/pydebloatx 是一种用于 Windows 操作系统的 Python 脚本&#xff0c;用于卸载 Windows 10 系统中的预装应用和系统组件&#xff0c;以便提高系统性能和释放磁盘空间。它是 Debloat Windows 10 脚本的一个分支&#xff0c;但具有更友好和…

免费活动-11月4日敏捷武林上海站 | Scrum.org CEO 亲临现场

​​​​​​​ 活动介绍 过去的几年里&#xff0c;外界的风云变幻为我们的生活增添了一些不一样的色彩。在VUCA世界的浪潮里&#xff0c;每一个人都成为自己生活里的冒险家。面对每一次的变化&#xff0c;勇于探索未知&#xff0c;迎接挑战&#xff0c;努力追逐更好的自己。…

SpringBoot集成与应用Neo4j

文章目录 前言集成使用定义实体配置定义Repository查询方法方式一&#xff1a;Query方式二&#xff1a;Cypher语法构建器方式三&#xff1a;Example条件构建器方式四&#xff1a;DSL语法 自定义方法自定义接口继承自定义接口实现自定义接口neo4jTemplateNeo4jClient 自定义抽象…

C++ 中的可移植性和跨平台开发

在当今软件开发行业中&#xff0c;跨平台开发已经成为了一种非常流行的方式。C作为一门强大的编程语言&#xff0c;也被广泛应用于跨平台开发中。然而&#xff0c;由于不同操作系统的差异和限制&#xff0c;C在不同的平台上的表现可能会有所不同。为了解决这个问题&#xff0c;…