首页 > 编程语言 >224. 划分数(挑战程序设计竞赛)

224. 划分数(挑战程序设计竞赛)

时间:2023-01-10 10:01:05浏览次数:60  
标签:方案 竞赛 数字 int 相加 程序设计 224 dp

地址 https://www.papamelon.com/problem/224

有 n 个无区别的物品, 将它们划分成不超过 m 组,求划分方法数模 M 的余数

输入
输入第一行有三个整数 n、m、M
1≤m≤n≤1000
1≤M≤10^4
 
输出
输出一个整数表示划分方法数模 M 的余数
样例 1
输入
4 3 10000
输出
4

解答
先从简单模型观察 然后向已有模型上套
4个物品分成3堆 可以分成004 013 022 112
问题可以转化为 3个数字 相加为4 可以有几种方案
允许出现0 并且为了避免 400 004这些相同的分配答案出现 我们规定数字排列从小到大

现在的问题描述变为 m个数字 相加为n 可以有几种方案, 方案数字排列从小到大.
dp[m][n]表示 m个数字相加为n的方案数
dp[m][n]可以分成两部分 所有数字不为0的情况下
112 -> 001 3个数字 相加为4的不出现0的方案数 ,其实就是每个数字上减1的那种组合的方案数,即 3个数字相加为1的方案数,也就是dp[m][n-m]

所有数字有0的情况
004->04 3个数字 相加为4的不出现0的方案数 ,其实就是固定一个数字为0后的那种组合的方案数,即2个数字相加为4的方案数 也就是dp[m-1][n]
013->13
022->22
状态转换
dp[m][n] = dp[m][n-m]+dp[m-1][n]

代码如下

#include <iostream>

using namespace std;
const int N = 1010;
int dp[N][N];
int n, m, M;

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

	cout << dp[m][n] << endl;

	return 0;
}

我的视频题解空间

标签:方案,竞赛,数字,int,相加,程序设计,224,dp
From: https://www.cnblogs.com/itdef/p/17039249.html

相关文章

  • 223. 最长上升子序列问题(挑战程序设计竞赛)
    地址https://www.papamelon.com/problem/223有一个长为n的序列a_0,a_1,...,a_n。求出这个序列的最长上升子序列的长度。上升子序列指的是对于任意的i<j都满足......
  • 222. 多重部分和问题(挑战程序设计竞赛)
    地址https://www.papamelon.com/problem/222有n种不同大小的数字a_i,每种各m_i个。判断是否可以从这些数字之中选出若干个并使得它们的和恰好为K输入第一行包含......
  • C++面向对象程序设计
    目录第二章类和对象构造函数析构函数对象数组第三章深入理解类和对象3.5常对象与常成员3.6动态创建对象和释放对象3.7对象的生存期3.8程序实例第四章静态成员与友元......
  • S2-017 CVE-2013-2248
    漏洞名称ApacheStruts多个开放重定向漏洞(CVE-2013-2248)s2-017利用条件Struts2.0.0-Struts2.3.15漏洞原理通过操作前缀为“redirect:”/“redirectAction:”的......
  • 2022-2023-1 20221320 《计算机基础与程序设计》第十九周学习总结
    学期(2022-2023-1)学号(20221320)《计算机基础与程序设计》第十九周学习总结作业信息各项要求具体内容<班级的链接>2022-2023-1-计算机基础与程序设计<作业要......
  • 面向对象程序设计 第一章 绪论
    第一章绪论目录·计算机程序设计语言的发展·面向对象的方法·面向对象的软件开发·程序开发的过程·信息的表示与存储计算机程序·计算机的工作使用程序......
  • 北京大学程序设计MOOC-魔兽世界大作业(三)
    程序设计-魔兽世界大作业上一篇作业解析与代码:​​魔兽世界-装备​​项目OJ提交:​​魔兽世界-开战​​思路与类架构题目需求分析与设计魔兽世界是两方阵营战斗的游戏,双方......
  • C语言程序设计课程设计[2023-01-07]
    C语言程序设计课程设计[2023-01-07]C语言程序设计课程设计要求一、课程设计目的1.进一步掌握和利用C语言进行程设计的能力;2.进一步理解和运用结构化程设计的思想和......
  • 《随机算法在信息学竞赛中的应用》做题记录
    目录《随机算法在信息学竞赛中的应用》做题记录MSTONESProblemSolutionP3567[POI2014]KUR-CouriersProblemSolutionCF364DGhdProblemSolutionTKCONVEXProblemSolutionP12......
  • 竞赛图
    竞赛图,是每两个点之间都有一条有向边的图。因为有一种模型是两者之间比赛谁能赢,赢的人对输的人连一条边,因此叫做竞赛图。竞赛图的性质:对SCC缩点之后是一条链式结构,类......