动态规划之 “完全背包“ ------P8646 [蓝桥杯 2017 省 AB] 包子凑数

ops/2025/3/7 2:32:31/

文章目录

  • 前言
  • 一、例题
  • 二、分析题意
  • 三、代码示例
  • 总结


前言

今天讲一道蓝桥真题
需要的前置知识点是完全背包,如果对此知识点不懂可以点击此处了解代码随想录之完全背包

现在我们有了这个前置知识点后直接开始看题


一、例题

在这里插入图片描述

二、分析题意

其实这就是一个完全背包问题,每个物品可以无限次数的拿取,当然,一个纯的完全背包问题问的是一个j容量的背包在对于一些物品无限次拿取的时候最大价值为多少,这道题我们要求的不是最大价值,而是背包是否可以被装满,比如我的背包容量为5,如果dp[5]=5说明可以被装满,按照题目的意思就是可以凑出5这个数

那什么时候是INF无限个数呢?其实我们开数据范围就能知道,我们只需要开一个较大的dp数组即可

dp状态转移公式
dp[j]=max(dp[j],dp[j-value[i]]+value[i])

我们在求完全背包的问题,在遍历背包的时候一定是正序遍历的,因为一件物品可以多次拿取,如果这里还有疑惑,说明前置知识点并没有理解透彻,请点击前言部分的链接学习完01背包一维dp完全背包问题后再解决此题目

三、代码示例

#include<iostream>
using namespace std;
int n;
int value[110];
int dp[1000005];//背包容量为i能装的最大价值为dp[i]
int main()
{cin>>n;for(int i=1;i<=n;i++){cin>>value[i];}for(int i=1;i<=n;i++)//遍历物品{for(int j=value[i];j<=1000000;j++)//正序遍历背包 因为一件物品可以被多次拿取{dp[j]=max(dp[j],dp[j-value[i]]+value[i]);}}int ans=0;for(int i=1;i<=1000000;i++){if(dp[i]==0||dp[i]!=i){ans++;//记录凑不出数的个数}}if(ans>=500000)cout<<"INF";//如果有500000个数凑不出 那基本上就是无限了else{cout<<ans;//否则直接输出多少个数不可以被凑出}return 0;
}

总结

学习路线: 二维01背包-----一维01背包------完全背包


http://www.ppmy.cn/ops/163399.html

相关文章

将md格式转jupyter并运行

将md格式转jupyter并运行 有时候我们需要将这种文档以学习的形式记笔记到jupyter中&#xff08;任务&#xff09; 但是内容太多了&#xff0c;一个一个粘贴又不方便&#xff0c;怎么办呢&#xff1f; 发现直接粘贴到md中是带格式的&#xff01;&#xff01;&#xff01; 那…

Linux常见命令

目录 一、文件命令 1.cd命令 2.mkdir命令 3.rm命令 4.pwd命令 5.ls命令 6.cp命令 7.mv 命令 二、查看文件内容 8.cat命令 三、文件搜索 9.find命令 四、文件权限 10.chmod命令 11.chown命令 12.chgrp命令 五、文本处理 13.grep命令 14.paste命令 15.sort命…

输电线路杆塔倾斜智能监测:守护电网安全的智慧之眼

​ ​2023年夏&#xff0c;某超高压输电线路突发倒塔事故&#xff0c;导致三省市大面积停电&#xff0c;直接经济损失超2.3亿元。事后调查显示&#xff0c;杆塔倾斜角度早已超出安全阈值&#xff0c;但传统巡检未能及时发现。这个刺痛行业的案例&#xff0c;揭开了电力设施监…

信号+槽——QT的核心特性

在 QT里面实现控件与控件之间的联动关系(数据交互关系) 信号&#xff1a; 当一个组件发生任何改变(状态或者属性改变&#xff0c;人为主动操作/被动改变) 这些状态改变&#xff0c;称为 发生了事件 当任意一个组件&#xff0c;发生事件,该组件会发出一个与该事件关联的信号 …

【Laplacian边缘检测详解】

Laplacian边缘检测详解 目录 Laplacian边缘检测详解一. 定义二. 原理三. 特点四. 使用技巧五. MATLAB示例代码示例1&#xff1a;基本Laplacian边缘检测示例2&#xff1a;扩展Laplacian核的使用示例3&#xff1a;与Sobel边缘检测的比较示例4&#xff1a;检测图像中的文字边缘示例…

JavaScript 变量命名规范

在编写JavaScript代码时&#xff0c;选择合适的变量名对于代码的清晰度、可读性和可维护性至关重要。一个良好的变量命名规范不仅能帮助团队成员更好地理解代码意图&#xff0c;还能减少错误发生的可能性。本文将介绍一些广泛接受的JavaScript变量命名规则和最佳实践。 命名的…

剧本杀门店预约小程序:市场发展下的刚需

在剧本杀爆发式增长下&#xff0c;门店数字化运营的模式正在市场中逐渐展开&#xff0c;线下门店的竞争方向已发生了全新转变&#xff01; 目前&#xff0c;数字化发展已经成为了消费市场的刚需&#xff0c;利用网络的便捷性提高服务&#xff0c;优化运营&#xff0c;提高自身…

另辟蹊径:多维度解析 STM32 微控制器

开篇&#xff1a;STM32 的广泛影响力 在嵌入式系统的广阔天地中&#xff0c;STM32 系列微控制器宛如一颗璀璨的明星&#xff0c;散发着耀眼的光芒。它凭借出色的性能、丰富的资源以及高性价比&#xff0c;在工业、医疗、消费电子等众多领域广泛应用&#xff0c;成为无数开发者…