当前位置: 首页 > 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/news/108305.html

相关文章:

  • 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 在线条码打印基于
  • 云服务器搭建Spark集群
  • centos服务器搭建安装Gitlab教程使用教程
  • 电子器件 电感
  • 设计模式面试知识点总结
  • Node编写重置用户密码接口
  • 大数据-Storm流式框架(六)---Kafka介绍
  • npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
  • MySQL的安装和配置
  • 【2021集创赛】Robei杯一等奖:基于Robei EDA工具的隔离病房看护机器人设计
  • 在自己的服务器上部署个人博客和开源项目:实现数字存在感