【算法|动态规划No.32 | 完全背包问题】完全背包模板题

个人主页:兜里有颗棉花糖

欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创

收录于专栏【手撕算法系列专栏】【LeetCode

🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助

🍓希望我们一起努力、成长,共同进步。

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

目录

1️⃣题目描述

2️⃣题目解析

解法1:

状态表示:dp[i][j]表示从前i个物品中进行挑选体积不超过j的所有选法中的最大价值。

状态转移方程:

  • dp[i][j] = max(dp[i][j],dp[i - 1][j - V[i] * k] + k * W[i])

3️⃣解题代码

朴素算法:

cpp 复制代码
#include<iostream>
using namespace std;

const int N = 1010;
int V[N],W[N],dp[N][N];

int main()
{
    int n,v;
    cin >> n >> v;
    for(int i = 1;i <= n;i++) cin >> V[i] >> W[i];
    for(int i = 1;i <= n;i++)
    {
        for(int j = 0;j <= v;j++)
        {
            for(int k = 0;k * V[i] <= j;k++)
            {
                dp[i][j] = max(dp[i][j],dp[i - 1][j - V[i] * k] + k * W[i]);   
            }
        }
    }
    cout << dp[n][v];
    return 0;
}

时间优化:

cpp 复制代码
#include<iostream>
using namespace std;

const int N = 1010;
int V[N],W[N],dp[N][N];

int main()
{
    int n,v;
    cin >> n >> v;
    for(int i = 1;i <= n;i++) cin >> V[i] >> W[i];
    for(int i = 1;i <= n;i++)
    {
        for(int j = 1;j <= v;j++)
        {
            dp[i][j] = dp[i - 1][j];
            if(j - V[i] >= 0) dp[i][j] = max(dp[i - 1][j],dp[i][j - V[i]] + W[i]);
        }
    }
    cout << dp[n][v];
    return 0;
}

空间优化(滚动数组):

cpp 复制代码
#include<iostream>
using namespace std;

const int N = 1010;
int V[N],W[N],dp[N];

int main()
{
    int n,v;
    cin >> n >> v;
    for(int i = 1;i <= n;i++) cin >> V[i] >> W[i];
    for(int i = 1;i <= n;i++)
        for(int j = V[i];j <= v;j++)
            dp[j] = max(dp[j],dp[j - V[i]] + W[i]);
    cout << dp[v];
    return 0;
}
相关推荐
宝贝儿好12 分钟前
【LLM】第三章:BERT讲解+情感分析案例
人工智能·深度学习·神经网络·算法·自然语言处理·bert
z小猫不吃鱼15 分钟前
06 权重幅值剪枝、剪枝后微调与稀疏网络训练:模型剪枝中的三个基本问题
网络·算法·剪枝
QiLinkOS25 分钟前
QiLink OS的失败数据共享平台的运作模式是否适用于所有行业?
android·开发语言·人工智能·算法·重构·开源
C++ 老炮儿的技术栈39 分钟前
MFC 自定义纯色居中文字进度条控件
c语言·数据库·c++·windows·算法·c·visual studio
researcher-Jiang39 分钟前
Manacher算法学习与应用
c++·学习·算法
码完就睡43 分钟前
数据结构——串的模式匹配算法(BF算法、KMP算法)
数据结构·算法
tachibana244 分钟前
hot100 排序链表(148)
java·数据结构·算法·leetcode·链表
林泽毅1 小时前
Qwen3.5 DPO 模型对齐实战(pytrio训练版)
人工智能·python·算法
imuliuliang1 小时前
算法中的随机化思想及其复杂度收益评估的技术7
算法
不能跑的代码不是好代码1 小时前
二叉树从基础概念到LeetCode实战
算法·leetcode