【算法|动态规划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 分钟前
11.7比赛总结
数据结构·算法
你好helloworld14 分钟前
滑动窗口最大值
数据结构·算法·leetcode
AI街潜水的八角1 小时前
基于C++的决策树C4.5机器学习算法(不调包)
c++·算法·决策树·机器学习
白榆maple1 小时前
(蓝桥杯C/C++)——基础算法(下)
算法
JSU_曾是此间年少1 小时前
数据结构——线性表与链表
数据结构·c++·算法
此生只爱蛋2 小时前
【手撕排序2】快速排序
c语言·c++·算法·排序算法
咕咕吖3 小时前
对称二叉树(力扣101)
算法·leetcode·职场和发展
九圣残炎3 小时前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
lulu_gh_yu3 小时前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
丫头,冲鸭!!!4 小时前
B树(B-Tree)和B+树(B+ Tree)
笔记·算法