整数划分问题 动态规划解决 (C++)

C++递归实例:整数划分问题 阅读详情

大致内容

将一个整数 N N N 划分成 M M M 个数字,使得这 M M M个数字的总和为 N N N 其中, 划分出来的整数可以为 0 0 0 , 同时不同的排列算一种组合, 求总共能有几个不同的组合

相似的题目

POJ 1664 放苹果
AcWing 1050 鸣人的影分身

代码展示

#include<iostream>
#include<algorithm>

using namespace std;

const int N = 15;

int m, n;
int dp[N][N];

int main()
{
    cin >> m >> n;
    dp[0][0] = 1;
    for(int i = 0; i <= m; i++)
        for(int j = 1; j <= n; j++)
        {
            dp[i][j] = dp[i][j - 1];
            if (i >= j) dp[i][j] += dp[i - j][j];
        }
    cout << dp[m][n] << endl;
    return 0;
}

思路

dp的含义

dp[i][j] 表示总和为i, 分了j个数字的所有的方案

划分的依据

划分的依据是整个划分的数字中,最小的数字是否为 0 0 0

状态转移方程

通过这个划分,可以将左右的组合划分成两部分,一部分为 在这个组合中最小值为0, 另一部分则是最小值不是0

由于删去0以后对这部分的组合数量不影响,所以可以将0删去, 所以划分了j - 1个,由于删去0以后对剩余的数的总和不影响, 所以此时的dp表示为 dp[i][j - 1]

对于不是0的部分, 将组合中的数全部同时减1以后, 该组合的数量和没有减1以后的组合的数量相同, 所以可以减1. 此时, 所有的数的总和为 i - j, 由于只是减1, 所以划分的数量不变, 为j, 此时的dp表示为 dp[i - j][j]

所以状态转移方程则是
dp[i][j] = dp[i][j - 1] + dp[i - j][j]

初始化

当拆分0的时候,总共能拆分0次,那么就有一种拆分方法,则是什么都不拆
dp[0][0] = 1

第二种算法

用完全背包的思路来做
(代码仅供参考)

#include<iostream>
#include<algorithm>

using namespace std;

const int N = 1010, mod = 1e9 + 7;

int n;
int dp[N];       // 总从前i个数中选,总数为j的方案

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;
}

dp[i][j]表示在前i个物品中选,总数为j的方案的个数

C++整数划分问题 (带算式) 整数划分问题的升级版,记录的同时分享一下算法 我对着硅谷发誓,本文原创! Question 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和,当n等于5时有6种拆分方法: 5=1+1+1+1+1 5=1+1+1+2 5=1+1+3 5=1+2+2 5=1+4 5=2+3 PS.本题不包含n=n这种情况 input 一行包含一个正整数n(1&amp;lt;n&amp;lt;10)。 ... 阅读详情

相关推荐

整数划分c++代码

c++,算法题,递归 指把一个正整数n写成多个大于等于1且小于等于其本身的整数的和,则其中各加数所构成的集合为n的一个划分。这是一个典型的递归算法。

C++ 程序设计题解:数的划分

C++ 程序设计题解:数的划分 题目描述 问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。例如:n=7,k=3,下面三种分法被认为是相同的:   1,1,5; 1,5,1; 5,1,1;    问有多少种不同的分法。 输入描述 n,k 输出描述 一个整数,即不同的分法 样例输入 7 3 样例输出 4 我的代码 #include <iostream> ...

Keith L的博客 2509

网络可视化工具netron详细安装流程

netron安装目录1.netron 简介2.不同操作系统下的安装使用方式2.1 在线版本:只要有浏览器就可以2.2 不同操作系统安装使用3.netron支持的网络框架4.netron测试演示 1.netron 简介 在实际的项目中,经过会遇到各种网络模型,需要我们快速去了解网络结构。如果单纯的去看模型文件,脑海中很难直观的浮现网络的架构。 这时,就可以使用netron可视化工具,可以清晰的看到每一层的输入输出,网络总体的架构,而且支持各种不同网络框架,简单好用。 2.不同操作系统下的安装使用方式 2.1

江南研习社 12万+

数的划分

数的划分 题目描述 将整数nn分成kk份,且每份不能为空,问有多少种不同的分法。当 n=7,k=3时,下面三种分法被认为是相同的:1,1,5; 1,5,1;5,1,1;5,1,1 输入 一行两个数n,k。 输出 一行一个整数,即不同的分法数。 样例输入 7 3 样例输出 4 题解: 样例解释 四种分法为:1,1,5...

Old flame.Scar 944

告别点不亮!STM32F103驱动HT1621段码屏的常见坑点与调试心得

本文详细解析了STM32F103驱动HT1621段码屏的五大常见问题及解决方案,包括硬件连接、时序控制、RAM地址映射等关键难点。通过实测数据和代码示例,帮助开发者快速排查显示异常问题,提升驱动开发效率。特别针对HT1621与STM32F103的兼容性问题提供了专业调试建议。

weixin_30925435的博客 380

5个IO口驱动188数码管:查理复用算法在TM52F1363上的极致应用

本文深入解析了如何利用查理复用算法,在TM52F1363单片机上仅用5个IO口驱动188数码管。通过精密的硬件连接与软件时序控制,结合高阻态和动态扫描策略,实现了在极致资源限制下的稳定显示,为成本敏感型嵌入式产品提供了高效的IO复用解决方案。

numpy6sculptor的博客 478

整数划分(C++)

一个正整数 n 可以表示成若干个正整数之和,形如: n=n1+n2+…+nk ,其中 n1≥n2≥…共一行,包含一个整数,表示总划分数量。现在给定一个正整数 n ,请你求出 n 共有多少种不同的划分方法。由于最后的值数量级很大,会超过存储长度long long int,在当前最大值下,总数为 i 的可划分的种类数量 dp[i]根据分配个数,将上方的分配情况转化为右方和下方的分配情况。我们将这样的一种表示称为正整数 n 的一种划分。第0位 list[0]=n;共一行,包含一个整数 n。

IqNus的博客 1543

如何解决Windows系统中缺失oem*.inf文件导致的软件运行问题

本文详细解析了Windows系统中因oem*.inf文件缺失导致软件无法运行的常见问题。文章阐述了oem*.inf文件作为安装信息文件的重要作用,并提供了从精准定位文件路径、安全获取与替换文件的手动修复步骤,到利用专业工具进行一站式修复的完整解决方案。最后,还给出了从软件安装来源、卸载习惯到系统维护等方面的预防措施,帮助用户彻底避免此类问题。

water的专栏 547

整数划分 二 问题c语言,整数划分问题 动态规划

ACM,OI等比赛,整数划分为常见的入门题,许久没打比赛,最近做笔试题突然碰到,磕磕绊绊了很久才搞清楚,现在做个笔记。-------------------------------------------------------------------------------------题目可见hduoj1028, 简单的讲:数字N,整数划分的组合数为多少。整数划分表示正整数的和集为N,比如N=...

weixin_39654067的博客 392

Qt视频播放器项目(打开文件,视频的播放与停止,进度条与视频进度绑定,调整音量,设置按钮图标,将槽函数与按钮绑定等功能)完整代码地址在末尾

【代码】Qt视频播放器项目。

分享计算机视觉,C++,网络摄像头研发,音视频开发,嵌入式等知识。 758

YOLO26改进策略【Neck】| CVPR2025 LCA轻量交叉注意力 跨层级双向引导 + 分层降噪增强,提升微小目标特征表达

简单相加、拼接融合无法建立深浅层双向约束关系,浅层微小目标易被深层背景覆盖,深层全局信息难以修正浅层噪声;普通单路自注意力仅单一层内建模依赖,缺少跨层级特征互引导机制,深浅特征信息割裂;标准多头跨注意力计算量大、参数量高,轻量化单模态检测/分割网络部署困难,无法区分前景目标与背景噪声。为此设计单模态轻量化交叉注意力LCA,构建浅层细节、深层语义双分支双向引导结构,轻量完成跨层级特征交互,同步降噪并强化单模态微小目标特征。

Limiiiing的博客 523

动态规划之最大K乘积问题

题目要求 设I是一个n位十进制整数。如果将I划分为k段,则可得到k个整数。这k个整数的乘积称为I的一个k乘积。试设计一个算法,对于给定的I和k,求出I的最大k乘积。 例如十进制整数 1234 划分为 3 段可有如下情形: 1 × 2 × 34 = 68 1 × 23 × 4 = 92 12 × 3 × 4 = 144 大体思路 证明满足最优性原理 假设已知前n-1位整数,被划分为k-1段,得到的...

中位数问题 分治法 9319

元数据治理实战:构建企业数据地图与血缘体系

元数据(Metadata)是描述数据的数据,是你能了解“数据是怎么来的”、“它是做什么的”、“能不能用”的基础信息。📌 举个例子:order_idstringods_order定义:平台内用户在订单系统中产生的唯一订单编号更新时间:每天凌晨 2 点,由 Airflow 调度任务生成所属人:张三(数据开发部)🔍 这些信息本身不直接参与计算,但它们是数据可管理、可追踪、可评估的基础。模块实战建议元数据类型技术 + 业务 + 操作元数据三类统一治理治理路径。

晴天彩虹雨的博客 290

nyoj90整数划分 搜索DFS 动态规划

整数划分时间限制:3000 ms  |  内存限制:65535 KB难度:3描述将正整数n表示成一系列正整数之和:n=n1+n2+…+nk, 其中n1≥n2≥…≥nk≥1,k≥1。 正整数n的这种表示称为正整数n的划分。求正整数n的不 同划分个数。 例如正整数6有如下11种不同的划分: 6; 5+1; 4+2,4+1+1; 3+3,3+2+1,3+1+1+1; 2+2+2,2+2+1+1,2+1+...

popcjz的博客 1647

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【动态规划初识】整数划分

整数划分问题,在前面问题的基础上加大了难度,对于DP的应用更加灵活。

D_D_zy的博客 747

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

整数划分问题

将正整数n表示为:其中划分的顺序不重要,即 3+2 和 2+3 被视为相同的划分。

m0_52484587的博客 316

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

整数划分——计数类DP(c++)

AcWing 900. 整数划分 一个正整数n可以表示成若干个正整数之和,形如:n=n1+n2+…+nk,其中n1≥n2≥…≥nk,k≥1。 我们将这样的一种表示称为正整数n的一种划分。 现在给定一个正整数n,请你求出n共有多少种不同的划分方法。 输入格式 共一行,包含一个整数n。 输出格式 共一行,包含一个整数,表示总划分数量。 由于答案可能很大,输出结果请对109+7取模。 数据范围 1≤n≤1000 输入样例: 5 输出样例: 7 思路:把1,2,3, … n分别看做n个物体的体积,这n个物体均无

Annabel_CM的博客 635

整数划分问题模型

整数划分问题模型 问题一: 求把n划分成k个正整数的方案数? 暴力dp:(暴力dp要做到不重不漏) 设dp[i][j][sum]表示前i个正整数,选了j个数,和为sum的方案数,答案是:dp[n][k][n] 本质:完全背包 复杂度:O(n*k*n) 正解: 直接设dp[i][j]表示把i划分成j个数的方案数 则dp[i][j]=dp[i-j][j]+dp[i-1][j-1](可从数形结...

dbp123123的博客 338

动态规划|最大k乘积问题(C语言)

题目: 【分析】 先通过若干个简单例子来观察规律,摸索思路。例如十进制整数 1234 划分为 3 段可有如下情形: 1 × 2 × 34 = 68 1 × 23 × 4 = 92 12 × 3 × 4 = 144(满足要求的解) 以计算正整数 1234 的最大 3 乘积为例,即 I = 1234,n = 4,k = 3(将 1234 分为 3 段)。由于计算乘积时要使用整数中的“一段”数字,则定义 w(s,t) 表示 I 中从第 s 位到第 t 位组成的数,如 w(2,3)=23;按照动态规划算法处理问题

qq_43941925的博客 2867

动态规划-整数划分

1.基础dp 整数划分:1.1基础题目1:输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。思路:等差数列的求和,an=a1+k-1 ;(a1+a1+k-1)*k=2*n; 先求出k即找出2*n的因子;解的集合与 2n的在[2,sqrt(2n)]区间的几个因子相关。每个因子可能对应一个解-----...

qq_36914923的博客 1437

POJ 4119 复杂的整数划分问题 动归

#include<bits/stdc++.h> using namespace std; int main() { int N,K,i,j,k; while(scanf("%d%d",&N,&K)!=EOF){ //第一问,划分成K个正整数之和 //dp[i][j][k]用前i个数中的j个组成k int d...

LiO_Liu的博客 582

经典递归问题与动态规划

参考链接:https://blog.youkuaiyun.com/summer070825/article/details/76572434 http://www.cnblogs.com/DarrenChan/p/8734203.html 一些经典递归问题 斐波那契数列问题 经典生兔子问题,不再赘述。 从该算法改进过程看递归问题的优化求解方式。 version 1: long Fibonac...

JeffLee的博客 925

整数划分问题---动态规划、递归

转自 http://blog.youkuaiyun.com/xiaozhuaixifu/article/details/9796725 第一: 将一个整数 n 划分为 不超过m 组 的划分数 如  n=4 m=3 输出: 4 { 1+1+2=1+3=2+2=4} 思路:使用动态规划: 定义状态: dp[i][j] j的i划分的组数 递推:dp[i][j]=dp[i][j-i]+dp[i-1

taoqick的专栏 1207

简单整数划分——动态规划

转自:https://yq.aliyun.com/articles/445250 总时间限制: 100ms 内存限制: 65536kB 描述 将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1&gt;=n2&gt;=…&gt;=nk&gt;=1 ,k&gt;=1 。 正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。 输入 ...

light_color 2205

整数划分问题——动态规划

原文出处:http://blog.youkuaiyun.com/metalseed/article/details/10858981   整数划分 有以下情况: 1) 将n划分成若干正整数之和的划分数。 2) 将n划分成k个正整数之和的划分数。 3) 将n划分成最大数不超过k的划分数。 4) 将n划分成若干奇正整数之和的划分数。 5) 将n划分成若干不同整数之和的划分数。

世界很大 648
上一篇: 蓝桥杯 试题 算法训练 进击的青蛙(C++)
下一篇: 蓝桥杯 试题 基础练习 回形取数 (c++)
ghost_him
博客等级 码龄6年 598粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值