【算法|动态规划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;
}
相关推荐
一次旅行1 小时前
RLHF全链路深度解析:Reward Model数学推导+PPO完整实战,对比GRPO轻量化方案
人工智能·算法·机器学习
Wang's Blog1 小时前
AI Agent白手起家29: Few Shot 提示词工程实战
人工智能·算法
June`2 小时前
warp shuffle指令
c++·人工智能·算法·cuda
geovindu2 小时前
go:Bit Operation Algorithm
开发语言·后端·算法·golang·位运算法
坏柠2 小时前
C语言进阶:从零实现一个可靠的环形缓冲区,吃透回绕、边界与并发
java·c语言·算法
Wang's Blog3 小时前
AI Agent白手起家31: 根据语义相似度动态选择 Few Shot 示例
人工智能·算法
白白白小纯3 小时前
每日算法day3—回文链表,链表分割
c语言·数据结构·算法·leetcode
手写码匠4 小时前
华为云Flexus+DeepSeek征文|Dify 构建企业级联网搜索 Agent:查询改写、多源检索与引用溯源实战
人工智能·深度学习·算法·aigc
tudousisi2224 小时前
B3928 [GESP202312 四级] 田忌赛马
算法
七夜zippoe4 小时前
DolphinDB 能耗统计分析实战:报表生成、同比环比与定额对比
人工智能·算法·dolphindb·报表生成·能耗统计·定额对比