首页 > 其他分享 >动态规划-背包问题——[模版]完全背包问题

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

时间:2024-11-16 22:17:37浏览次数:3  
标签:背包 int 模版 问题 include max 价值 dp

1.题目解析

题目来源

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

测试用例 

2.算法原理

1.状态表示

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

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

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

2.状态转移方程

3.初始化

4.填表顺序

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

5.返回值 

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

3.实战代码

#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.代码优化

 

标签:背包,int,模版,问题,include,max,价值,dp
From: https://blog.csdn.net/2301_80689220/article/details/143809130

相关文章

  • Spring注解@Transactional事务使用问题
    同步数据需要分批操作,每次同步1000条,都需要提交事务@ServicepublicclassMyService{@AutowiredprivateMyServiceself;//注意使用自身代理对象来触发事务//循环调用此方法@Transactional(propagation=Propagation.REQUIRES_NEW)publicvoid......
  • 关于HDFS路径文件夹名称的问题
    问题发现​ 最开始的需求:修改/origin_data/gmall/db目录下所有以inc结尾的文件夹里的文件夹(名称为2024-11-15)修改为2020-6-14问gpt写了个脚本:#!/bin/bash#遍历/origin_data/gmall/db下所有以"inc"结尾的文件夹fordirin$(hdfsdfs-ls/origin_data/gmall/db|grep......
  • 汉诺塔问题自己的理解
    #include<stdio.h>voidmove(charA,charB){   intstaticcount=1;   这个是拿来计算移动次数的   printf("%d",count);   printf("%c-->%c\n",A,B);   count++;}voidhanno(intn,charA,charB,charC){   if(n==1)     ......
  • springboot3整合mybatisplus问题Invalid value type for attribute 'factoryBeanObjec
    版本说明:JDK版本:17springboot版本:3.3.5问题分析:springboot版本与mybatisplus版本不兼容解决办法:将mybatisplus版本替换为以下版本<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>......
  • 几个有意思的多线程问题 & 有趣现象笔记
    信号量释放的时候线程被带入的问题SemaphoreSlim和多线程使用的时候,.Release()时,应该在新的线程去做Release操作同理,因为Release时会切换到await等待的代码执行,也就是调用SemaphoreSlim.Release的线程被带入到了awaitSemaphoreSlim.WaitAsync()的代码执行,如果是一个......
  • AI|经常崩溃的问题解决
    AdobeIllustratorCrashes网络上大部分说法都是重装AI,兼容性问题,管理员权限或者是版本不对,经测试均无效,甚至出现重装系统这种离谱的办法,正确的解决办法是把首选项的性能里的GPU取消勾选,或者再把电脑的虚拟内存扩大即可。 Step1:打开首选项 Step2:取消勾选GPU性能......
  • 探索大型语言模型(LLMs)能否在不泄露私人信息的情况下联合其他大型语言模型共同解决问题
    概述谷歌的GeminiUltra(2023年)和OpenAI的GPT-4(2023年)等大规模语言模型在许多任务中都表现出了令人印象深刻的性能。然而,这些模型不仅推理成本高昂,而且运行于数据中心,而数据中心并非本地环境,无法获得私人数据。另一方面,可以在私人环境中运行的模型,如GeminiNano,可以......
  • 字节青训营 相邻字母匹配计数问题
    问题描述小F有一个由大写字母和小写字母组成的字符串。她想知道,在忽略字母大小写的情况下,有多少对相邻的字母是相等的。例如,对于字符串 "aABbbC",在忽略大小写的情况下,有3对相邻字母是相等的,分别是 "aA","AB" 和 "bb"。测试样例样例1:输入:s="aABbbC"输出:3样例2:......
  • 未使用 `deleteLater` 而直接使用 `delete` 导致问题
    以下是一个完整的Qt代码示例,展示了未使用deleteLater而直接使用delete导致问题的情况,该示例涉及到一个简单的多线程场景,主线程创建一个工作线程,工作线程完成任务后通知主线程,在对象删除处理不当的情况下会出现崩溃等问题。示例代码#include<QObject>#include<QThread>#i......
  • 服务CUP飙高的问题排查
    1.问题描述7月4号,18:53分,值班时,WMS-SEVICE出现服务负载飙高的告警。自动生成的Dump2.问题分析排查过程:看下"grafna"的服务监控,如下图,在18:50~18:55分这段时间内,确实服务CUP很高。 为什么这么高啊?有大的网络IO操作吗?继续排查。分析jstack文件打开jstack文件......