动态规划解决背包问题

news2024/10/6 20:43:22

目录

动态规划步骤:

1.01背包问题

2.完全背包问题


动态规划步骤:

 step1.分析问题,定义dp数组(下标含义)

step2.初始化dp数组(边界)

step3.写dp状态转换方程(明确dp数组遍历顺序)

1.01背包问题

        即物品均只能取1次

46. 携带研究材料(第六期模拟笔试) (kamacoder.com)icon-default.png?t=N7T8https://kamacoder.com/problempage.php?pid=1046

#include <iostream>
#include <vector>
using namespace std;

void debug_input(vector<int>& vec){
    for(auto it=vec.begin(); it!=vec.end(); it++){
        cout<<*it<<" ";
    }
    cout<<endl;
}

class solution
{
public:
    int max_value(vector<int>& space, vector<int>& value, int M, int N){
        // 定义dp[i][j]
        vector<vector<int>> dp(M+1, vector<int> (N+1, 0));
        //初始化
        for(int j=space[0]; j<=N; j++)
            dp[0][j] = value[0];
        //状态转换
        for(int i=1; i<M; i++){
            for(int j=1; j<=N; j++){
                if(j < space[i]) dp[i][j] = dp[i-1][j];
                else dp[i][j] = max( dp[i-1][j], dp[i-1][j-space[i]] + value[i]); 
            }
        }
        return dp[M-1][N];
    }
};

int main(){
    // input
    int M,N,input;
    cin>>M>>N;
    vector<int> space(M,0);
    vector<int> value(M,0);
    for(int i=0; i<M; i++){
        cin>>input;
        space[i] = input;
    }
    for(int i=0; i<M; i++){
        cin>>input;
        value[i] = input;
    }
    // // debug input
    // debug_input(space);
    // debug_input(value);
    
    //solve
    solution mysolve;
    cout<<mysolve.max_value(space, value, M, N);
    
    return 0;
}

2.完全背包问题

        即满足条件下,每个物品可取无数次。 

52. 携带研究材料(第七期模拟笔试) (kamacoder.com)icon-default.png?t=N7T8https://kamacoder.com/problempage.php?pid=1052 

#include <iostream>
#include <vector>
using namespace std;

void debug_input(vector<int>& vec){
    for(auto it=vec.begin(); it!=vec.end(); it++){
        cout<<*it<<" ";
    }
    cout<<endl;
}

class solution
{
public:
    int max_value(vector<int>& space, vector<int>& value, int total_num, int total_space){
        // 定义dp[i][j]
        vector<vector<int>> dp(total_num, vector<int> (total_space+1, 0));
        //初始化
        for(int j=space[0]; j<=total_space; j++){
            dp[0][j] = dp[0][j-space[0]] + value[0];
        }
        //状态转换
        for(int i=1; i<total_num; i++){
            for(int j=1; j<=total_space; j++){
                if(j < space[i]) dp[i][j] = dp[i-1][j];
                else dp[i][j] = max( dp[i-1][j], dp[i][j-space[i]]+value[i]);
            }
        }
        return dp[total_num-1][total_space];
    }
};

int main(){
    //input
    int total_num, total_space;
    cin>>total_num>>total_space;
    vector<int> space(total_num,0);
    vector<int> value(total_num,0);
    int s, v;
    for(int i=0; i<total_num; i++){
        cin>>s>>v;
        space[i] = s;
        value[i] = v;
    }
    // debug_input(space);
    // debug_input(value);
    
    //solve
    solution mysolve;
    cout<<mysolve.max_value(space, value, total_num, total_space);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1589672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Super数据结构】二叉搜索树与二叉树的非递归遍历(含前/中/后序)

&#x1f3e0;关于此专栏&#xff1a;Super数据结构专栏将使用C/C语言介绍顺序表、链表、栈、队列等数据结构&#xff0c;每篇博文会使用尽可能多的代码片段图片的方式。 &#x1f6aa;归属专栏&#xff1a;Super数据结构 &#x1f3af;每日努力一点点&#xff0c;技术累计看得…

【饿了么笔试题汇总】[全网首发]2024-04-12-饿了么春招笔试题-三语言题解(CPP/Python/Java)

&#x1f36d; 大家好这里是KK爱Coding &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新饿了么近期的春秋招笔试题汇总&#xff5e; &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x…

.cur 鼠标光标文件读取

备份icon掩码开发代码-CSDN博客 代码改写自 目前bug是高度不足&#xff0c;顶上的几十个像素图片打印需要加常数&#xff0c; i的改写是 i/3,参考上面链接的自简书的代码 #include <stdio.h> #include <windows.h> #pragma warning(disable : 4996) // visu…

[lesson20]初始化列表的使用

初始化列表的使用 类成员的初始化 C中提供了初始化列表对成员变量进行初始化 语法规则 注意事项 成员的初始化顺序与成员的声明顺序相同成员的初始化顺序与初始化列表中的位置无关初始化列表先于构造函数的函数体执行 类中的const成员 类中的const成员会被分配空间的类中…

【Linux】环境搭建

昙花一现&#xff0c;却等待了整个白昼 蝉鸣一夏&#xff0c;却蛰伏了几个四季 目录 购买云服务器 总结 使用 XShell 远程登陆到 Linux 利用Linux编写一个简单C程序 ⭐toush -- 创建文件 ⭐vi -- 文本编译器 ⭐ll -- 查看文件的显示结果分析 ⭐gcc -o ⭐cat -- 查看源代码 契子…

利用细粒度检索增强和自我检查提升对话式问题解答能力

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 论文标题&#xff1a;Boosting Conversational Question Answering with Fine-Grained Retrieval-Augmentation and Self-Check 论文地址&#xff1a;https://arxiv.org/abs/2403.18243 检索增强生成…

【报错】AttributeError: ‘NoneType‘ object has no attribute ‘pyplot_show‘(已解决)

【报错】AttributeError: ‘NoneType’ object has no attribute ‘pyplot_show’ 问题描述&#xff1a;python可视化出现下面报错 我的原始代码&#xff1a; import matplotlib.pyplot as pltplt.figure() plt.plot(x, y, bo-) plt.axis(equal) plt.xlabel(X) plt.ylabe…

最短路径问题——(弗洛伊德算法与迪杰斯特拉算法)

最短路径问题——&#xff08;弗洛伊德算法与迪杰斯特拉算法&#xff09;【板子】 题目&#xff1a; 对于下面的图片所给出的关系,回答下面两个问题&#xff1a; 利用迪杰斯特拉算法求点A到每一个点之间的最小距离。利用弗洛伊德算法求每两个点之间的最短路径。 &#xff0…

[RK3399 Linux] 使用ubuntu 20.04.5制作rootfs

一、ubuntu base ubuntu base是用于为特定需求创建自定义映像的最小rootfs,是ubuntu可以运行的最小环境。 1.1 下载源码 下载ubuntu-base的方式有很多,可以从官方的地址:ttp://cdimage.ubuntu.com/ubuntu-base/releases。 也可以其它镜像地址下载,如清华源:https://mi…

弹性云服务器性能对比(内附测试数据),快快网络服务器崭露头角

随着计算技术的不断革新&#xff0c;云服务器已成为企业和个人部署应用与服务的首选。尤其线上业务日益盛行的今天&#xff0c;云服务商的实力更是备受瞩目。对于企业而言&#xff0c;高稳定&#xff0c;存储速度都是不可或缺的基本要求&#xff0c;这些都对公有云的云端编解码…

算法 囚犯幸存者

题目 主类 public static List<Prisoner> prisoners new ArrayList<Prisoner>(); public static List<Prisoner> remainPrisoners new ArrayList<Prisoner>(); public static Prisoner lastPrisoner null;public static void main(String[] args) …

Fastgpt配合chatglm+m3e或ollama+m3e搭建个人知识库

概述&#xff1a; 人工智能大语言模型是近年来人工智能领域的一项重要技术&#xff0c;它的出现标志着自然语言处理领域的重大突破。这些模型利用深度学习和大规模数据训练&#xff0c;能够理解和生成人类语言&#xff0c;为各种应用场景提供了强大的文本处理能力。AI大语言模…

VulnHub靶机-easy_cloudantivirus 打靶

easy_cloudantivirus 靶机 目录 easy_cloudantivirus 靶机一、导入虚拟机配置二、攻击方式主机发现端口扫描web渗透-SQL注入命令注入反弹shellssh爆破提权 一、导入虚拟机配置 靶机地址&#xff1a; https://www.vulnhub.com/entry/boredhackerblog-cloud-av,453/下载完成&am…

golang实现定时监控 CLOSE_WAIT 连接的数量

文章目录 go实现定时检查大量的 CLOSE_WAIT 连接背景&#xff1a;为什么监控指定端口上的 CLOSE_WAIT 连接数量原因&#xff1a;什么是CLOSE_WAITgo实现定时检查大量的 CLOSE_WAIT 连接参考 go实现定时检查大量的 CLOSE_WAIT 连接 监控指定端口的连接状态&#xff0c;特别是关…

阿里云服务器公网带宽费用全解析(不同计费模式)

阿里云服务器公网带宽怎么收费&#xff1f;北京地域服务器按固定带宽计费一个月23元/M&#xff0c;按使用流量计费0.8元/GB&#xff0c;云服务器地域不同实际带宽价格也不同&#xff0c;阿里云服务器网aliyunfuwuqi.com分享不同带宽计费模式下带宽收费价格表&#xff1a; 公网…

了解 RISC-V IOMMU

了解 RISC-V IOMMU 个人作为 IOMMU 初学者&#xff0c;从初学者的角度介绍我眼中 RISCV 的 IOMMU 如果有些描述不够专业&#xff0c;还请谅解&#xff0c;也欢迎讨论 部分内容来自 https://zhuanlan.zhihu.com/p/679957276&#xff08;对于 RISCV IOMMU 规范手册的翻译&#xf…

这是雷军的简历,落魄时卡里只有冰冷的40亿

互联网新词儿 周五了&#xff0c;来点放松的&#xff08;嗯&#xff1f;周五&#xff1f;不是上了五天班了吗&#xff0c;为什么不是周六 如果说哪一种炫富秀优越并不伤人&#xff0c;那一定是富含"幽默感"的脱口秀式的吹牛。 我印象中&#xff0c;江湖上还是有这么个…

UDP网络程序

上一章中&#xff0c;我们介绍了socket&#xff0c;以及TCP/UDP协议。这一章带大家实现几个UDP协议的网络服务。我们需要一个 服务端和一个客户端。 1.服务端实现 1.1socket函数 #include <sys/types.h> #include <sys/socket.h>int socket(int domain, in…

Vue结合el-table实现合并单元格(以及高亮单元表头和指定行)

实现效果如下&#xff1a; 思路&#xff1a; 1.首先使用动态表头表格。 2.其次实现动态计算合并单元格。&#xff08;计算规则 传递需要合并的字段&#xff09; 3.然后封装公共的计算单元格方法 export导出供多个页面使用。 4.同时需要封装成公共的组件供多个页面使用。 5…

Hi3861 OpenHarmony嵌入式应用入门--鸿蒙开发环境搭建

目录 简介 准备材料 安装开发环境 配置开发工具和sdk 新建工程 代码编译 简介 本篇将进行hi3861开发环境的搭建&#xff0c;并能够编译默认工程。 准备材料 华为集成开发环境工具DevEco Device Tool 华为集成开发环境IDE DevEco Device Tool下载 | HarmonyOS设备开发 …