计蒜客-划分整数(dp)

动态规划典型题:给定正整数n,将其划分为正整数的和,求划分方法数 动态规划:整数划分数之有限制与无限制 整数划分是一类常见的动态规划问题,但是根据条件不同会导致细节上的差异。写这篇博文是自己找这类问题的解法时发现如果不注意这些细节可能会导致错误,所以做一个区分。 1、无限制划分 这类问题的最常规呈现形式是: (1)给定一个正整数n,将其划分为正整数的和,求有多少种划分方法 即将n表示为n=m1+m2+…+mi; (其中mi为正整数,并且1 <= mi &l... 阅读详情

划分整数

蒜头君特别喜欢数学。今天,蒜头君突发奇想:如果想要把一个正整数 nnn 分解成不多于 kkk 个正整数相加的形式,那么一共有多少种分解的方式呢?

蒜头君觉得这个问题实在是太难了,于是他想让你帮帮忙。

输入格式

共一行,包含两个整数 n(1≤n≤300)n(1 \leq n \leq 300)n(1≤n≤300) 和 k(1≤k≤300)k(1 \leq k \leq 300)k(1≤k≤300),含义如题意所示。

输出格式

一个数字,代表所求的方案数。

样例输入
5 3
样例输出
5
可设dp[n][k]表示将正整数n分解为不多于k个正整数相加的形式的方案数。根据题意,应分以下4种情况讨论:

        1°n=1 或 k=1:n=1时只有"1=1"这1种分解方案;k=1时只有"n=n"这1种分解方案,故方案数=1;

        2°n<k:相当于dp[n][k],因正整数n不可能分解为超过n个正整数相加的形式;

        3°n>k:根据"是否将n恰好分解为k个正整数相加的形式"(上界),进行讨论:

              1°°将n恰好分解为k个正整数相加的形式:此时分解出的每个正整数t都满足t>=1,故相当于将分解出的k个数"都减去1",即相当于dp[n-k][k],也就是将正整数n-k分解为不多于k个正整数相加的形式的方案数;

              2°°将n分解为小于k个正整数相加的形式:此时即dp[n][k-1],也就是将正整数n分解为不多于k-1个正整数相加的形式的方案数;

              故方案数=dp[n-k][k]+dp[n][k-1];

        4°n=k:总体与3°相同,但将n恰好分解为k个正整数相加的形式时,只有"n=n/k+n/k+...+n/k"这1种分解方案,故方案数=1+dp[n][k-1]。


        综上,可得以下结论:

code:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
ll dp[310][310];
ll N,k;
int main(){
    ll i,j;
    cin >> N >> k;
    memset(dp,0,sizeof(dp));
    for(i = 1; i <= N; i++){
        for(j = 1; j <= k; j++){
            if(i == 1 || j == 1)
                dp[i][j] = 1;
            else if(i < j)
                dp[i][j] = dp[i][i];
            else if(i > j)
                dp[i][j] = dp[i-j][j] + dp[i][j-1];
            else
                dp[i][j] = 1 + dp[i][j-1];
        }
    }
    cout << dp[N][k] << endl;
    return 0;
}


题解:整数划分问题(DP) 总时间限制: 200ms 内存限制: 65536kB 描述 将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。 正整数n 的这种表示称为正整数n 的划分。输入 标准的输入包含若干组测试数据。每组测试数据是一行输入数据,包括两个整数N 和 K。 (0 < N <= 50, 0 < K <= N)输出 对于每组测试数据,输出 阅读详情

相关推荐

计蒜客 A1634:划分整数

计蒜客 A1634:划分整数 来源:计蒜客 标签:计数dp 参考资料: 相似题目: 题目 蒜头君特别喜欢数学。今天,蒜头君突发奇想:如果想要把一个正整数 n 分解成不多于 k 个正整数相加的形式,那么一共有多少种分解的方式呢? 蒜头君觉得这个问题实在是太难了,于是他想让你帮帮忙。 输入 共一行,包含两个整数n(1≤n≤300)和k(1≤k≤300),含义如题意所示。 输出 一个数字,...

WINGREZ‘S BLOG 479

关于整数划分的几类问题

概念:所谓整数划分,是指把一个正整数写成几个正整数的和的形式,即n=∑mi   其中,1≤mi≤n,{m1,m2,...,mk}是n的一个划分。如果max{mi}≤M,则称{m1,m2,...,mk}属于n的一个M划分。 例如: 6 = 6 = 5+1  = 4+2  = 4+1+1  = 3+3  = 3+2+1  = 3+1+1+1  = 2+2...

weixin_30362083的博客 215

从零到千兆:KSZ9031 PHY芯片在Zynq PS端的驱动移植心路历程

本文详细记录了在Xilinx Zynq-7000平台(基于XC7Z020芯片)上,为KSZ9031千兆以太网PHY芯片移植LwIP协议栈驱动的完整过程。从硬件连接配置、Vivado工程设置到LwIP库的深度修改与调试,分享了解决PHY识别、自协商及性能优化等关键问题的实战经验,助力开发者实现稳定的千兆网络连接。

honey的博客 1104

整数划分问题

所谓整数划分,是指把一个正整数n写成如下形式:        n=m1+m2+...+mi; (其中mi为正整数,并且1        如果{m1,m2,...,mi}中的最大值不超过m,即max(m1,m2,...,mi)        例如但n=4时,他有5个划分,{4},{3,1},{2,2},{2,1,1},{1,1,1,1};        注意4=1+3 和 4=3+1被认

zxc的专栏 2823

lumerical-环形谐振器

利用mode求解器优化得到所需的环的总长度,即环形器的半径,然后通过varFDTD得到光场分布和透过率.

m0_61776728的博客 2188

1 FFmpeg从入门到精通-FFmpeg简介

1.FFmpeg简介 1.1 FFmpeg的定义 1.2 FFmpeg的历史 1.3 FFmpeg的基本组成 1.4 FFmpeg的编解码工具ffmpeg 1.5 FFmpeg的播放器ffplay 1.6 FFmpeg的多媒体分析器ffprobe 1.7 FFmpeg编译(1)FFmpeg之Windows平台编译(2)FFmpeg之Linux平台编译(3)FFmpeg之OS X平台编译 1.8 FFmpeg编码支持与定制(1)FFmpeg的编码器支持(2)FFmpe

migu123的专栏 3684

整数划分

题目内容: 对于一个正整数n的划分,就是把n变成一系列正整数之和的表达式。注意,分划与顺序无关,例如6=5+1跟6=1+5是 同一种分划。另外,单独这个整数本身也算一种分划。 例如:对于正整数n=5,可以划分为: 1+1+1+1+1 1+1+1+2 1+1+3 1+2+2 2+3 1+4 5 输入描述 输入一个正整数n 输出描述 输出n整数划分的总数k 输入样例 5 输出样例 7 从前大一的时候做...

Light 430

SAP 第三方销售

第三方销售

yanzibing99的博客 3514

贪心算法——输入任意一个正整数N,将其分成多个互不相同的整数,和为N,乘积最大

今天在学校群里有人问到这个问题: 输入任意一个正整数N,将其分成多个互不相同的整数,和为N,乘积最大。写出C/C++代码。 贪心策略:要使乘积做大,尽可能地将指定的n(n>4)拆分成从2开始的连续的自然数的和,如果最后有剩余的数,将这个剩余的数在优先考虑后面项的情况下平均分给前面的各项。 例:n=10,先拆分为:10=2+3+4+1,最后一项为1,比4小,将其分配给前面的一项,得到10=2+

Jack‘s Blog---u never know me! 1万+

V2签名预装失败原因及解决方案

GOOGLE最新的GTS要求targetSdkVersion 大于30的APK必须使用V2及以上签名。 但实际在预装过程中,GTS测试会失败。 后面发现这是由于预装方式的原因造成的。原来的预装方式是使用APK,指定APK使用预签名的方式。Android.mk如下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := DKTest LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_TAGS

zyfzhangyafei的专栏 6303

【CANoe示例分析】0002_SOMEIPDemo

该工程由Vector官方提供,作为仿真SOME/IP节点的示例。Demo中介绍了两种仿真SOME/IP节点的方法,一种是基于arxml数据库的仿真,另一种是没有数据库(arxml、fibex)的仿真。无论是哪种形式的仿真,如果想要通过CAPL程序接收或者发送SOME/IP信息,都需要添加交互层的信息,这些信息可以通过添加DLL文件实现,DLL文件路径在CANoe安装目录下的Exec32文件中。

jasonj333 3513

计蒜客 -- 基础dp --划分整数

蒜头君特别喜欢数学。今天,蒜头君突发奇想:如果想要把一个正整数n分解成不多于k个正整数相加的形式,那么一共有多少种分解的方式呢 蒜头君觉得这个问题实在是太难了,于是他想让你帮帮忙。 输入格式 共一行,包含两个整数n(1≤n≤300)和k(1≤k≤300),含义如题意所示。 输出格式 一个数字,代表所求的方案数。 样例输入复制 5 3 样例输出复制 5 对于...

森宝的博客 528

大模型知识边界探索:LLM设计的极限测试

最优化理论是数学中的一个分支,主要研究如何从给定的一组约束条件下找到最优解。目标函数:定义了需要优化的指标,可以是最大化或最小化。约束条件:定义了在优化过程中需要满足的限制条件。无约束优化:目标函数和约束条件都不存在。有约束优化:目标函数存在,但存在约束条件。多目标优化:同时需要优化多个目标函数。极限测试(Ultimate Test)是一种系统性的方法,用于评估大型模型(如LLM)在极端条件下的性能和稳定性。极端数据分布:与模型训练数据分布显著不同的数据集。极端计算资源。

AI天才研究院 431

计蒜客 划分整数(dp)

题目大意 蒜头君特别喜欢数学。今天,蒜头君突发奇想:如果想要把一个正整数 n 分解成不多于 k 个正整数相加的形式,那么一共有多少种分解的方式呢? 蒜头君觉得这个问题实在是太难了,于是他想让你帮帮忙。 输入格式 共一行,包含两个整数 n(1 \leq n \leq 300)n(1≤n≤300) 和 k(1 \leq k \leq 300)k(1≤k≤300),含义如题意所示。 输出格...

so_so_y的博客 554

6.3 节深度拆解:Hermes Agent 多 Agent 协同执行链路的 4 层设计逻辑

拆解 Hermes 多 Agent 协同的 4 层工程化设计(协议层、编排层、执行层、适配层),聚焦协议层的强约束消息 Schema 如何解决 Agent 间语义不一致问题,并提供 `soul.md` 配置、GLM-4.7Flash 结构化输出验证及 v0.13.0/v0.14.0 版本实操避坑指南

weixin_42520239的博客 121

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

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

计蒜客 整数划分问题 (区间DP)

/* dp[i][j]表示到第i个数末尾加入j-1个乘号所得到的最大值 a[i][j]表示数字序列中从第i个数到第j个数连起来的值 */ #include &lt;bits/stdc++.h&gt; using namespace std; #define inf 0x3f3f3f3f const int N=35; long long n,a[N][N],dp[N][N]; ...

兜率工的博客 607

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

程序设计:划分整数(计蒜客)(dp)

程序设计:划分整数 蒜头君特别喜欢数学。今天,蒜头君突发奇想:如果想要把一个正整数 nn 分解成不多于 kk 个正整数相加的形式,那么一共有多少种分解的方式呢? 蒜头君觉得这个问题实在是太难了,于是他想让你帮帮忙。 输入格式 共一行,包含两个整数 n(1 \leq n \leq 300)n(1≤n≤300) 和 k(1 \leq k \leq 300)k(1≤k≤300),含义如题意所示。 输出格...

abc1235454的博客 213

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

将n划分成最大数不超过m的划分数

之前写过类似的文章,今天看到另外一种划分数的方法,也就是将n划分成不大于m的种数。若是划分多个整数可以存在相同的:dp[n][m]= dp[n][m-1]+ dp[n-m][m] dp[n][m]表示整数 n 的划分中,每个数不大于 m 的划分数。 则划分数可以分为两种情况: a.划分中每个数都小于 m,相当于每个数不大于 m- 1, 故划分数为 dp[n][m-1]. b.划分中有一个数为 m....

m0_37286282的博客 1538

计蒜客CS109习题DP:墙壁涂色

蒜头君觉得白色的墙面好单调,他决定给房间的墙面涂上颜色。他买了 3 种颜料分别是红、黄、蓝,然后把房间的墙壁竖直地划分成 n 个部分,蒜头希望每个相邻的部分颜色不能相同。他想知道一共有多少种给房间上色的方案。

threescience的博客 696

计蒜客-划分整数(动态规划)

划分整数 蒜头君特别喜欢数学。今天,蒜头君突发奇想:如果想要把一个正整数 nnn 分解成不多于 kkk 个正整数相加的形式,那么一共有多少种分解的方式呢? 蒜头君觉得这个问题实在是太难了,于是他想让你帮帮忙。 输入格式 共一行,包含两个整数 n(1≤n≤300)n(1 \leq n \leq 300)n(1≤n≤300) 和 k(1≤k≤300)k(1 \leq k \leq 300)...

amf12345的博客 461

计蒜客2018省赛B组模拟五《J划分整数》

蒜头君特别喜欢数学。今天,蒜头君突发奇想:如果想要把一个正整数 nn 分解成不多于 kk个正整数相加的形式,那么一共有多少种分解的方式呢?蒜头君觉得这个问题实在是太难了,于是他想让你帮帮忙。输入格式共一行,包含两个整数 n(1 \leq n \leq 300)n(1≤n≤300) 和 k(1 \leq k \leq 300)k(1≤k≤300),含义如题意所示。输出格式一个数字,代表所求的方案数。...

程序员小嗨 609

计蒜客 难题题库 028 等和的分隔子集

491次  14.2%  1000ms  65536K 晓萌希望将1到N的连续整数组成的集合划分成两个子集合,且保证每个集合的数字和是相等。例如,对于N=3,对应的集合{1,2,3}能被划分成{3} 和 {1,2}两个子集合. 这两个子集合中元素分别的和是相等的。 对于N=3,我们只有一种划分方法,而对于N=7时,我们将有4种划分的方案。 输入包括一行,仅一个整数,表示N的值(1≤

呈凹的博客 2049

计蒜客 - T2155(数的划分)

题目链接:https://vjudge.net/problem/%E8%AE%A1%E8%92%9C%E5%AE%A2-T2155 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序)例如:n=7,k=3,下面三种分法被认为是相同的。 1,1,51,5,15,1,1 问有多少种不同的分法。 输入格式 第一行有两个整数n,k(6<n≤200,2≤k≤6) 输出格式 1个整数,即不同的分法个数。 Sample Input 7 3 Sample O...

weixin_44757834的博客 730

计蒜客经典dp背包题 等和的分隔子集

晓萌希望将1到N的连续整数组成的集合划分成两个子集合,且保证每个集合的数字和是相等。例如,对于N=3,对应的集合{1,2,3}能被划分成{3} 和 {1,2}两个子集合. 这两个子集合中元素分别的和是相等的。 对于N=3,我们只有一种划分方法,而对于N=7时,我们将有4种划分的方案。 输入包括一行,仅一个整数,表示N的值(1≤N≤39)。 输出包括一行,仅一个整数,晓萌可以划分对应N的集合的方案的...

qqqingyi的博客 335

整数划分(计数类dp)-java

整数划分我们主要通过两种思路来对这道题就行解决。提示:以下是本篇文章正文内容,下面案例可供参考还是主要对状态转移方程的递推和对dp数组的理解。

m0_63267251的博客 986
上一篇: 计蒜客-蒜头君的数轴(gcd)
下一篇: 计蒜客-数列求值(数学)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值