0804 OpenJ#7215 简单的整数划分问题
2017-08-04 19:05
281 查看
[b]摘要:递归使用中将问题化为更小的同类子问题[/b]
[b]原题目链接:简单的整数划分问题[/b]
描述
将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。
正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。
输入标准的输入包含若干组测试数据。每组测试数据是一个整数N(0 < N <= 50)。输出对于每组测试数据,输出N的划分数。样例输入
样例输出
提示5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1
来源: http://cxsjsxmooc.openjudge.cn/2017t2summerw3/2/
题目理解:递归中的化为更小问题的表现在递归方法的总体思想是将待求解问题的解看作输入变量 x 的函数 f(x),通过寻找函数 g,使得 f(x) = g(f(x-1)),并且已知 f(0)的值,就可以通过 f(0)和 g 求出 f(x)的值。这样一个思想也可以推广到多个输入变量 x,y,z
等,x-1 也可以推广到 x - x1,只要递归朝着出口的方向走就可以了 。
本题的类型转化同一个叫做放苹果的题目,本题求n的m个数划分记为f(n,m) 对于n与m的关系就可以转换问题到更小的规模,当n>=m时 和f(n-m,m)+f(n,m-1)是一样的(及假设各个数不为0那么把他们全部减一效果是一样的,另外就是至少有一个0,那么与m-1是一样的) n<m时 与f(n,n)是一样的。不断转化直到 n==0||m==0的情况。
注意:递归中储存了递归的结果,因此速度会比较快。不过要是要输出各个划分的话 可能又不好实现了。
[b]日期:[/b]
2017 8 4
[b]附加:[/b]
[b]代码:[/b]
[b]原题目链接:简单的整数划分问题[/b]
描述
将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。
正整数n 的这种表示称为正整数n 的划分。正整数n 的不同的划分个数称为正整数n 的划分数。
输入标准的输入包含若干组测试数据。每组测试数据是一个整数N(0 < N <= 50)。输出对于每组测试数据,输出N的划分数。样例输入
5
样例输出
7
提示5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1
来源: http://cxsjsxmooc.openjudge.cn/2017t2summerw3/2/
题目理解:递归中的化为更小问题的表现在递归方法的总体思想是将待求解问题的解看作输入变量 x 的函数 f(x),通过寻找函数 g,使得 f(x) = g(f(x-1)),并且已知 f(0)的值,就可以通过 f(0)和 g 求出 f(x)的值。这样一个思想也可以推广到多个输入变量 x,y,z
等,x-1 也可以推广到 x - x1,只要递归朝着出口的方向走就可以了 。
本题的类型转化同一个叫做放苹果的题目,本题求n的m个数划分记为f(n,m) 对于n与m的关系就可以转换问题到更小的规模,当n>=m时 和f(n-m,m)+f(n,m-1)是一样的(及假设各个数不为0那么把他们全部减一效果是一样的,另外就是至少有一个0,那么与m-1是一样的) n<m时 与f(n,n)是一样的。不断转化直到 n==0||m==0的情况。
注意:递归中储存了递归的结果,因此速度会比较快。不过要是要输出各个划分的话 可能又不好实现了。
[b]日期:[/b]
2017 8 4
[b]附加:[/b]
[b]代码:[/b]
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <memory.h> using namespace std; int F[60][60]; int f(int n,int m){ if(F [m]==-1){ if(n==0) return F [m]=1; if(m==0) return F [m]=0; if(n>=m){ return F [m]=f(n-m,m)+f(n,m-1); } if(n<m){ return F [m]=f(n,n); } } return F [m]; } int main(){ memset(F,-1,sizeof(F)); int n; while(~scanf("%d",&n))printf("%d\n",f(n,n)); return 0; }
相关文章推荐
- 简单的整数划分问题
- OpenJudge简单的整数划分问题两种方法(DFS)(动态规划0ms),全局题号7215,已AC
- 百练 04 简单的整数划分问题
- 简单整数划分问题
- 百练:简单的整数划分问题(经典dp)
- OpenJudge 7215简单的整数划分问题
- 简单的整数划分问题
- POJ 4117 简单的整数划分问题
- OpenJudge 简单的整数划分问题(递归)
- OJ 7215 简单的整数划分问题__动态规划
- A - 简单的整数划分问题 OpenJ_Bailian - 4117 (递归or动态规划)
- MOOC 简单的整数划分问题
- openjudge 简单的整数划分问题
- Python:简单的整数划分问题
- YTU.3131: 进阶递归之简单的整数划分问题
- OpenJudge 百练 2016 ACM 暑期课练习题 简单的整数划分问题
- OpenJudge_P7215 简单的整数划分问题(DP)
- 7215:简单的整数划分问题
- OpenJ_Bailian - 4117简单的整数划分问题-递归&动态规划
- 期末考试-简单的整数划分问题(算法基础 第10周)