`
digiter
  • 浏览: 120394 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

整数划分

    博客分类:
  • ICPC
阅读更多
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#define out(v) cout << #v << ": " << (v) << endl
#define MP(X,Y) make_pair(X,Y)
using namespace std;
typedef long long LL;

// 整数划分,hit1402 
int f1(int n, int t) {
	if (t == 0 || t == 1) return 1;
	int sum = 0;
	for (int i = 1; i <= t; ++i)
		sum += f1(n - i, min(n - i, i));
	return sum;
}
int f2(int n, int k) {
	if (n < k) return 0;
	if (n == k) return 1;
	int sum = 0;
	for (int i = 1; i <= k; ++i)
		sum += f2(n - k, i);
	return sum;
}
int f3(int n, int t) {
	if (t == 0 || t == 1) return 1;
	int sum = 0;
	for (int i = 1; i <= t; i += 2)
		sum += f3(n - i, min(n - i, i));
	return sum;
}
int f4(int n, int t) {
	if (n == 0) return 1;
	int sum = 0;
	for (int i = 1; i <= t; ++i)
		sum += f4(n - i, min(n - i, i - 1));
	return sum;
}

int main()
{
	int n, k;
	while (scanf("%d%d", &n, &k) != EOF) {
		printf("%d\n", f1(n, n)); // 将n划分成若干正整数之和的划分数
		printf("%d\n", f2(n, k)); // 将n划分成k个正整数之和的划分数
		printf("%d\n", f1(n, k)); // 将n划分成最大数不超过k的划分数
		printf("%d\n", f3(n, n)); // 将n划分成若干奇正整数之和的划分数
		printf("%d\n", f4(n, n)); // 将n划分成若干不同整数之和的划分数
		printf("\n");
	}
	return 0;
}

分享到:
评论

相关推荐

    整数划分,并输出结果

    ### 整数划分算法解析与实现 #### 一、整数划分的概念 整数划分是组合数学中的一个重要概念,指的是将一个正整数表示为若干个正整数之和的不同方式的数量。例如,数字4可以被划分为1+1+1+1、1+1+2、1+3或4本身等几...

    整数划分问题(实现代码)

    整数划分问题的实现代码 整数划分问题是将一个正整数 n 拆成一组数连加并等于 n 的形式,且这组数中的最大加数不大于 n。这是一种经典的组合数学问题,具有重要的理论价值和实践应用价值。 在解决整数划分问题时,...

    整数划分问题、具体算法实现

    整数划分问题是一个经典的计算机科学问题,主要涉及组合优化和图论领域。在数学上,它指的是给定一个正整数n,寻找所有可能的方法将其分成若干个正整数的和,每个正整数称为一个部分。每个不同的部分组合构成一个...

    整数划分方法2及代码(有注释)

    整数划分方法是计算机科学和算法设计中的一个重要概念,它涉及到如何将一个给定的正整数分成若干个正整数的和。在本场景中,我们关注的是“整数划分方法2”,这是一种递归解决方案,特别适用于解决循环游戏问题。 ...

    整数划分的解析

    整数划分是计算机科学中的一种经典算法问题,主要研究如何将一个正整数拆分成一组非负整数的和,且这些整数的和恰好等于原数。在本例中,我们关注的是最大加数不超过原数的整数划分。这个问题涉及到递归思想和数学...

    整数划分代码实现

    整数划分是一个经典的数学问题,它涉及到将一个正整数N划分为若干个正整数的和,且每个部分可以是1到N之间的任意整数,但不允许重复。在计算机科学中,这个问题常用于算法设计和分析,尤其是在动态规划、递归以及...

    整数划分方法1及代码(有注释)

    整数划分方法1是一种在计算机科学和算法设计中常见的问题,它涉及到将一个给定的非负整数拆分为若干个正整数之和,这些正整数的和必须等于原始整数。这个问题通常用于解决各种数学问题,例如在游戏理论中的循环游戏...

    整数划分的vs2010实现

    整数划分是一个经典的数学问题,它在计算机科学和算法设计中有着广泛的应用。在这个问题中,目标是将一个正整数n分解为若干个正整数的和,这些正整数互不相同,且可以按任意顺序排列。VS2010是Microsoft Visual ...

    整数划分的回溯法表示

    ### 整数划分的回溯法表示 #### 知识点概述 整数划分问题是一个经典的组合数学问题,指的是将一个正整数拆分成若干个正整数之和的方法数。例如,数字6可以被拆分为`6`, `5+1`, `4+2`, `4+1+1`, `3+3`, `3+2+1`, `3...

    中科大算法导论课程实验 整数划分 代码

    **整数划分问题** 整数划分是组合优化领域的一个经典问题,源于数学和计算机科学。在整数划分问题中,我们需要找到一个非负整数序列(可以为空),使得这些整数之和等于给定的正整数S,且序列中的每个元素都不相同...

    hutc-整数划分问题 参考代码

    ### hutc-整数划分问题 参考代码 #### 整数划分问题概述 整数划分问题是一个经典的组合数学问题,其目标是将一个正整数拆分成若干个正整数之和的不同方式的数量。例如,整数4可以被划分为5种不同的方式:4、3+1、2...

    整数划分问题java源码

    整数划分问题是一个经典的计算机科学中的算法问题,它在数学和计算机科学的多个领域都有应用。在这个Java源码中,我们可以看到如何解决这个问题。中国科学技术大学软件学院的《算法设计与分析》课程通过这个实验,...

    整数划分问题

    ### 整数划分问题详解 #### 一、整数划分问题概述 整数划分问题是一个经典的组合数学问题,主要研究如何将一个正整数分解为若干个正整数之和的不同方式。这个问题不仅在数学领域有广泛的应用,在计算机科学、算法...

    11088 整数划分的扩展问题

    根据给定的信息,我们可以推断出这是一个与整数划分(Integer Partition)相关的算法问题。整数划分是指将一个正整数表示为多个正整数之和的方法,且这些加数的顺序不重要。例如,数字4可以被划分为4、3+1、2+2、2+1...

    整数划分输出划分情况

    算法:整数划分问题,将一个整数n表示成一系列正整数之和。

    整数划分(C语言实现)

    整数划分是一个经典的数学问题,它涉及到将一个正整数N表示为若干个正整数之和,且每个正整数不重复。这个问题在计算机科学中有多种应用,比如在组合优化、图论以及数据结构等领域。C语言作为基础的编程语言,常常被...

    C#整数划分源码 整数划分源码

    整数划分在计算机科学中是一个经典的数学问题,特别是在算法设计和数据分析领域有着广泛的应用。它涉及到将一个给定的正整数N分解为若干个正整数的和,这些正整数可以是任意顺序,但不能重复。这个问题在C#编程语言...

Global site tag (gtag.js) - Google Analytics