当前位置: 首页 > article >正文

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

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【手撕算法系列专栏】【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.kler.cn/a/108305.html

相关文章:

  • 前端:块级元素和行内元素
  • Vector Optimization – Stride
  • 文件夹被占用了无法删除怎么办?强制粉碎文件夹你可以这样操作
  • 11张思维导图带你快速学习java
  • 基于非时空的离身与反身智能
  • 字符及字符串(ASCII编码系统)
  • springboot 项目非docker 部署自动启动
  • 【教3妹学编程-java实战5】结构体字段赋值的几种方式
  • 推理还是背诵?通过反事实任务探索语言模型的能力和局限性
  • [双指针](一) Leetcode 283.移动零和1089.复写零
  • 2.MySQL的调控按钮——启动选项和系统变量
  • 什么是离岸金融 (OFFSHORE FINANCE)
  • 关于FTP的一些往事
  • Linux多线程服务端编程:使用muduo C++网络库 学习笔记 第四章 C++多线程系统编程精要
  • 数据库简史:多主数据库架构的由来和华为参天引擎的机遇
  • [算法]求n!在m进制下末尾有多少个0
  • Redis(09)| Reactor模式
  • Vue 数据绑定 和 数据渲染
  • 分布式消息队列:RabbitMQ(1)
  • [ROS系列]ubuntu 20.04 从零配置orbslam3(无坑版)
  • 广州华锐互动:VR虚拟现实物理学习平台,开启数字化教学新格局
  • acwing 5283. 牛棚入住
  • 应用案例|基于三维机器视觉的机器人引导电动汽车充电头自动插拔应用方案
  • 怎么降低Linux内核驱动开发的风险?
  • 粤嵌实训医疗项目--day03(Vue + SpringBoot)
  • c# .net6 在线条码打印基于