动态规划-背包问题——[模版]完全背包问题

1.题目解析

题目来源

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [模版]完全背包_牛客题霸_牛客 |

测试用例

2.算法原理

1.状态表示

与01背包相同,这里的完全背包也是需要一个二维dp表来表示最大价值,具体如下

求最大价值****dp[i][j]:在[1,i]区间选择物品,此时总体积不大于j时的最大价值

求装满时的价值****dp[i][j]:在[1,i]区间选择物品,此时总体积严格等于j时的价值

2.状态转移方程

3.初始化

4.填表顺序

从上至下,每一行从左到右

5.返回值

返回最后一个位置dp表的值

3.实战代码

cpp 复制代码
#include <iostream>
#include <string.h>
using namespace std;
const int N = 1010;
int dp[N][N];
int n,V;
int v[N];
int w[N];

int main()
{
    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++)
        {
            dp[i][j] = dp[i-1][j];
            if(j >= v[i])
            {
                dp[i][j] = max(dp[i][j],dp[i][j-v[i]] + w[i]);
            }
        }
    }
    cout<<dp[n][V]<<endl;

    memset(dp,0,sizeof(dp));
    for(int j = 1;j <= V;j++)
    {
        dp[0][j] = -1;
    }
    for(int i = 1;i <= n;i++)
    {
        for(int j = 0;j <= V;j++)
        {
            dp[i][j] = dp[i-1][j];
            if(j >= v[i] && dp[i][j-v[i]] != -1)
            {
                dp[i][j] = max(dp[i][j],dp[i][j-v[i]] + w[i]);
            }
        }
    }
    cout<<(dp[n][V] == -1 ? 0 : dp[n][V])<<endl;

    return 0;
}

代码解析

4.代码优化

相关推荐
春蕾夏荷_72829772522 分钟前
c++ easylogging 使用示例
c++·log·easylogging
syt_biancheng26 分钟前
Day3算法训练(简写单词,dd爱框框,3-除2!)
开发语言·c++·算法·贪心算法
二进制的Liao41 分钟前
【编程】脚本编写入门:从零到一的自动化之旅
数据库·python·算法·自动化·bash
BullSmall1 小时前
《道德经》第五十八章
学习
自然数e1 小时前
C++多线程【线程管控】之线程转移以及线程数量和ID
开发语言·c++·算法·多线程
三品吉他手会点灯2 小时前
STM32F103学习笔记-16-RCC(第4节)-使用 HSI 配置系统时钟并用 MCO 监控系统时钟
笔记·stm32·单片机·嵌入式硬件·学习
云在Steven2 小时前
在线确定性算法与自适应启发式在虚拟机动态整合中的竞争分析与性能优化
人工智能·算法·性能优化
Lester_11012 小时前
嵌入式学习笔记 - 关于看门狗定时器的喂狗的操作放在中断还是放在主循环
笔记·单片机·学习
前进的李工2 小时前
LeetCode hot100:234 回文链表:快慢指针巧判回文链表
python·算法·leetcode·链表·快慢指针·回文链表
sin_hielo2 小时前
leetcode 3228
算法·leetcode