191、【动态规划】AcWing ——AcWing 900. 整数划分:完全背包解法+加减1解法(C++版本)
题目描述

参考文章:900. 整数划分
解题思路
因为本题中规定了数字从大到小,其实也就是不论是1 + 2 + 1 = 4,还是2 + 1 + 1 = 4,都会被看作是2 + 1 + 1 = 4这一种情况,因此本题是在遍历中不考虑结果顺序。
背包问题中只需考虑使用的物品种类,因此可转化为完全背包问题,将组成的数看作物品且容量为1n,背包容量为n。本题便转化为了,从物品1物品n(体积也是为1~n)中进行选择,构成背包容量为n的方案个数。
(1)完全背包二维数组
- 动态规划五步曲:
(1)dp[i][j]含义: 从1~i中选择物品,达到背包容量为j的方案个数。
(2)递推公式: dp[i][j]=(dp[i−1][j]+dp[i][j−i])dp[i][j] = (dp[i - 1][j] + dp[i][j - i])dp[i][j]=(dp[i−1][j]+dp[i][j−i]),完全背包的一般性化简后递推公式,未化简前所表示的是尝试放入物品1到物品j后的情况。
(3)dp数组初始化: dp[i][0] = 1,容量为0时,仅有一种情况。
(4)遍历顺序: 从左到右,从上到下。
(5)举例: (省略)
#include <iostream>using namespace std;const int N = 1010, mod = 1e9 + 7;
int n;
int dp[N][N];int main() {cin >> n;for(int i = 1; i <= n; i++) dp[i][0] = 1;for(int i = 1; i <= n; i++) {for(int j = 1; j <= n; j++) {if(i > j) dp[i][j] = dp[i - 1][j] % mod;else dp[i][j] = (dp[i - 1][j] + dp[i][j - i]) % mod;}}cout << dp[n][n] << endl;return 0;
}
(2)完全背包一维滚动数组
对变量进行优化
#include <iostream>using namespace std;const int N = 1010, mod = 1e9 + 7;
int n;
int dp[N];int main() {cin >> n;dp[0] = 1;for(int i = 1; i <= n; i++) {for(int j = i; j <= n; j++) {dp[j] = (dp[j] + dp[j - i]) % mod;}}cout << dp[n] << endl;return 0;
}
(3)用加减1方法
此方法主要使用的是加一个和减一个1,还保持某种方案不变化的特点,得来递推公式。因为我们要求的只是方案个数,
例如:组合成3的方案可以为2、1和1、1、1,当我们想要得到组合成4的方案,那么就可以分别从2、1和1、1、1演化过来,就是2、1、1和1、1、1、1,此时3中这一部分含有最小值为1的方案个数与4中这一部分含有最小值为1的方案个数其实是相同的。
(1)dp[i][j]含义: 由j个数组合成总和为i的方案个数
(2)递推公式: dp[i][j]=dp[i−1][j−1]+dp[i−j][j]dp[i][j] = dp[i - 1][j - 1] + dp[i - j][j]dp[i][j]=dp[i−1][j−1]+dp[i−j][j],将状态集合划分成两部分,一部分是j个数中的最小值值是1,另一部分是j个数中的最小值大于1。
对于最小值是1的集合,状态转移为dp[i][j]=dp[i−1][j−1]dp[i][j] = dp[i - 1][j - 1]dp[i][j]=dp[i−1][j−1],意思为当前状态由少一个1的状态演变过来。因为我们要求的是组合成目标数是的方案个数,因此加上一个时,其实还是在此种方案下,故方案个数与dp[i - 1][j - 1]的方案个数相同。
对于最大值大于1的集合,状态转移为dp[i][j]=dp[i−j][j]dp[i][j] = dp[i - j][j]dp[i][j]=dp[i−j][j],还是利用1这种特点,将j个数中各自减去一个1,此时dp[i][j]就可以有dp[i - j][j]而来。
(3)dp数组初始化: dp[0][0] = dp[1][1] = 1,重量为0和1时仅有一种方案。
(4)遍历顺序: 从左到右,从上到下。
(5)举例:
例如:组合成3的方案可以为2、1和1、1、1,当我们想要得到组合成4的方案,那么就可以分别从2、1和1、1、1演化过来,就是2、1、1和1、1、1、1,此时3中这一部分含有最小值为1的方案个数与4中这一部分含有最小值为1的方案个数其实是相同的。
#include <iostream>using namespace std;const int N = 1010, mod = 1e9 + 7;
int n;
int dp[N][N];int main() {cin >> n;dp[0][0] = dp[1][1] = 1;for(int i = 1; i <= n; i++) {for(int j = 1; j <= i; j++) {dp[i][j] = (dp[i - 1][j - 1] + dp[i - j][j]) % mod;}}int res = 0;for(int i = 1; i <= n; i++) res = (dp[n][i] + res) % mod;cout << res << endl;return 0;
}
相关文章:
191、【动态规划】AcWing ——AcWing 900. 整数划分:完全背包解法+加减1解法(C++版本)
题目描述 参考文章:900. 整数划分 解题思路 因为本题中规定了数字从大到小,其实也就是不论是1 2 1 4,还是2 1 1 4,都会被看作是2 1 1 4这一种情况,因此本题是在遍历中不考虑结果顺序。 背包问题中只需考虑…...
Java 比较器
public interface Comparable Comparable 接口位于 java.lang 包下,对实现它的每个类的对象强加一个总排序,这种排序被称为类的自然顺序,compareTo 方法被称为其自然比较方法。 实现此接口的对象的列表(和数组)可以由…...
配置本地 python GEE、geemap环境
1.安装anconda 百度搜索anconda清华镜像,从清华镜像中选择最新的anconda安装包,国内镜像网站下载速度较快,如果从国外官网下载速度相当慢,详细安装教程请参考: anconda安装教程https://blog.csdn.net/lwbCUMT/article…...
cmd命令教程
小提示: 在本文中,我将向您展示可以在 Windows 命令行上使用的 40 个命令 温馨提示:在本教程中学习使用适用于 Windows 10 和 CMD 网络命令的最常见基本 CMD 命令及其语法和示例 文章目录为什么命令提示符有用一、cmd是什么?如何在…...
深圳大学计软《面向对象的程序设计》实验15 函数模板和类模板
A. 有界数组模板类(类模板) 题目描述 编写有界数组模板BoundArray(即检查对数组元素下标引用并在下标越界时终止程序的执行),能够存储各种类型的数据。要求实现对数组进行排序的方法sort,及对数组进行查找…...
组播详解及示例代码
写在前面 由于公司业务需要用到组播实现,这里就记录下学习过程。在学习组播之前,我们先来看看另外两种数据包传输方式:单播和广播。 单播:简单来说就是数据一对一发送,如果需要给多个主机发送数据时,就需…...
C语言-qsort函数示例解析
一.qsort函数是什么stdlib.h头文件下的函数qsort()函数:是八大排序算法中的快速排序,能够排序任意数据类型的数组其中包括整形,浮点型,字符串甚至还有自定义的结构体类型。qsort函数实现对不同元素的排序主要就是通过对compar函数…...
一些Linux内核内存性能调优笔记!
前言 在工作生活中,我们时常会遇到一些性能问题:比如手机用久了,在滑动窗口或点击 APP 时会出现页面反应慢、卡顿等情况;比如运行在某台服务器上进程的某些性能指标(影响用户体验的 PCT99 指标等)不达预期…...
【JVM】逃逸分析
开发者都知道,基本上所有对象都是在堆上创建。但是,这里还是没有把话说绝对哈,指的是基本上所有。昨天一位朋友在聊天中,就说了所有对象都在堆中创建,然后被朋友一阵的嘲笑。 开始我们的正文,我们今天来聊聊…...
C51---震动传感器控制LED灯亮灭
1.example #include "reg52.h" sbit led1 P3^7;//原理图中led1指向P3组IO口的P3.7口 sbit vibrate P3^3;//Do接到了P3.3口 void Delay3000ms() //11.0592MHz { unsigned char i, j, k; //_nop_(); i 22; j 3; k 227; do { …...
使用 JaCoCo 生成测试覆盖率报告
0、为什么要生成测试覆盖率报告 在我们实际的工作中,当完成程序的开发后,需要提交给测试人员进行测试,经过测试人员测试后,代码才能上线到生产环境。 有个问题是:怎么能证明程序得到了充分的测试,程序中所…...
windows下neo4j安装及配置,并绘制人物关系图谱
neo4j安装及配置,绘制人物关系图谱 先升级pip,安装py2neo pip install py2neo2021.0.1依赖 jdk1.8, neo4j 3.xx; 或者jdk18,neo4j 4.x,5.x; 官网下载了neo4j4.x,5.x 因为jdk版本原因都不行&am…...
【Spring6】IoC容器之基于XML管理Bean
3、容器:IoC IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容…...
Warshall算法求传递闭包及Python编程的实现
弗洛伊德算法-Floyd(Floyd-Warshall)-求多源最短路径,求传递闭包 Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法, 与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大…...
AcWing第 93 场周赛
4867. 整除数 给定两个整数 n,k,请你找到大于 n 且能被 k 整除的最小整数 x。 输入格式 共一行,包含两个整数 n,k。 输出格式 输出大于 n 且能被 k 整除的最小整数 x。 数据范围 前 4 个测试点满足 1≤n,k≤100。 所有测试点满足 1≤n,k≤109。 …...
计及需求响应的粒子群算法求解风能、光伏、柴油机、储能容量优化配置(Matlab代码实现)
👨🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...
利用Nginx给RStudio-Server配置https
前篇文档,我这边写了安装RStudio-Server的方法。默认是http的访问方式,现在我们需要将其改成https的访问方式。 1、给服务器安装Nginx:参照之前的安装Nginx的方法。 2、创建/usr/local/nginx/ssl目录: mkdir /usr/local/nginx/ss…...
YOLOv7实验记录
这篇博客主要记录博主在做YOLOv7模型训练与测试过程中遇到的一些问题。 首先我们需要明确YOLO模型权重文件与模型文件的使用 其实在github的readme中已经告诉我们使用方法,但我相信有很多像博主一样眼高手低的人可能会犯类似的错误。 训练 首先是训练时的设置&…...
用Python获取史瓦西时空中克氏符的分量
文章目录三维球面坐标史瓦西时空三维球面坐标 Einsteinpy中提供了克氏符模型,可通过ChristoffelSymbols获取。简单起见,先以最直观的三维球面为例,来用Einsteinpy查看其克氏符的表达形式。 三维球面的度规张量可表示为 g001g11r2g22r2sin…...
QML编码约定
QML中的国际化: QML使用以下函数来将字符串标记为可翻译的 qsTr()qsTranslate()qsTrld()QT_TR_NOOP()QT_TRANSLATE_NOOP()QT_TRID_NOOP最常用的还是qsTr() string qsTr(string sourceText, string disambiguation&…...
OpenClaw+千问3.5-9B:自动化测试报告生成器
OpenClaw千问3.5-9B:自动化测试报告生成器 1. 为什么需要自动化测试报告 作为开发团队中的测试负责人,我每周都要面对数十份测试报告的手工整理工作。从Jenkins导出原始数据、用Excel制作图表、再到Word中排版成文档,整个过程至少消耗3-4小…...
Whisper.cpp 跨平台编译与语音识别实战指南
1. Whisper.cpp 是什么?能做什么? 第一次接触 Whisper.cpp 是在一个语音转文字的需求场景中。当时需要处理大量会议录音,但发现主流的语音识别工具要么需要联网,要么对硬件要求极高。直到发现了这个基于 C 实现的轻量级解决方案&a…...
LANCZOS智能压缩+RGB自动转换:Anything to RealCharacters预处理模块详解
LANCZOS智能压缩RGB自动转换:Anything to RealCharacters预处理模块详解 1. 项目概述 Anything to RealCharacters是一款专为RTX 4090显卡设计的2.5D转真人图像转换系统。该系统基于通义千问Qwen-Image-Edit-2511图像编辑模型,集成了专门优化的写实化权…...
SteamAutoCrack终极指南:三步实现Steam游戏离线自由运行
SteamAutoCrack终极指南:三步实现Steam游戏离线自由运行 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack 对于众多Steam游戏玩家来说,你是否曾遇到过这样的困境&…...
告别JSON臃肿!在STM32上用nanopb实现高效数据通信(附完整工程)
告别JSON臃肿!在STM32上用nanopb实现高效数据通信(附完整工程) 在嵌入式开发领域,数据通信的效率往往决定着整个系统的性能上限。当你的STM32F103只有20KB RAM可用时,JSON这种看似方便的文本协议突然变成了奢侈的选择…...
3步解决Realtek 8922AE WiFi 7网卡驱动固件不匹配实战指南
3步解决Realtek 8922AE WiFi 7网卡驱动固件不匹配实战指南 【免费下载链接】rtw89 Driver for Realtek 8852AE, an 802.11ax device 项目地址: https://gitcode.com/gh_mirrors/rt/rtw89 文章目录 【问题定位】WiFi 7网卡驱动加载失败的核心原因【环境诊断】三层级驱动问…...
IndexTTS2 V23情感控制实测:如何用滑块调节喜怒哀乐语音
IndexTTS2 V23情感控制实测:如何用滑块调节喜怒哀乐语音 1. 情感语音合成技术概述 1.1 什么是情感语音合成 情感语音合成(Emotional Text-to-Speech)是语音合成技术的重要分支,它突破了传统TTS系统"机械感"的局限&am…...
jsTree终极指南:从HTML到JSON数据源的完整使用教程
jsTree终极指南:从HTML到JSON数据源的完整使用教程 【免费下载链接】jstree jquery tree plugin 项目地址: https://gitcode.com/gh_mirrors/js/jstree jsTree是一款功能强大的jQuery树形插件,它允许开发者在网页中轻松创建交互式树形结构。无论是…...
三星固件管理工具Bifrost:跨平台固件获取与处理的技术伙伴
三星固件管理工具Bifrost:跨平台固件获取与处理的技术伙伴 【免费下载链接】SamloaderKotlin 项目地址: https://gitcode.com/gh_mirrors/sa/SamloaderKotlin 在三星设备维护与开发工作中,获取和处理官方固件往往是一项复杂且耗时的任务。传统方…...
实时互动艺术装置:LumiPixel Canvas Quest结合摄像头生成动态肖像
实时互动艺术装置:LumiPixel Canvas Quest结合摄像头生成动态肖像 1. 项目背景与核心价值 在当代艺术展览中,观众往往只是被动的观赏者。LumiPixel Canvas Quest项目打破了这种单向关系,通过实时图像处理和生成技术,让每位参观者…...
