【算法|动态规划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;
}
相关推荐
想唱rap12 分钟前
Linux下进程的状态和优先级
linux·运维·服务器·开发语言·数据结构·算法
普通网友34 分钟前
单元测试在C++项目中的实践
开发语言·c++·算法
Croa-vo1 小时前
逆袭Akuna Quant!美硕秋招亲历,从网申到拿offer全攻略
数据结构·经验分享·算法·面试·职场和发展
强化学习与机器人控制仿真2 小时前
字节最新开源模型 DA3(Depth Anything 3)使用教程(一)从任意视角恢复视觉空间
人工智能·深度学习·神经网络·opencv·算法·目标检测·计算机视觉
Teacher.chenchong2 小时前
R语言实现物种分布预测与生态位分析:多元算法实现物种气候生态位动态分析与分布预测,涵盖数据清洗、模型评价到论文写作全流程
开发语言·算法·r语言
mit6.8242 小时前
高维状态机dp|环形dp
算法
Swift社区2 小时前
LeetCode 427 - 建立四叉树
算法·leetcode·职场和发展
u***j3242 小时前
算法设计模式总结
算法·设计模式
vir022 小时前
交换瓶子(贪心)
数据结构·算法
G***66913 小时前
算法设计模式:贪心与动态规划
算法·设计模式·动态规划