洛谷OJ - P1025 - 数的划分(递归取球问题)
2017-05-24 09:24
134 查看
题目描述
将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
1,1,5;
1,5,1;
5,1,1;
问有多少种不同的分法。
输入
n,k (6<n<=200,2<=k<=6)
输出一个整数,即不同的分法。
样例输入
样例输出
题目说明
四种分法为:
1,1,5;
1,2,4;
1,3,3;
2,2,3;
题目思路
这种题目等价于将n个求分成m堆,有多少种分法。
1:递归解决。dfs(n,m)表示n个球分成m堆的分法,
dfs(n,m) = dfs(n-m,m)+dfs(n-1,m-1)
2:搜索解决。
暴力搜索枚举所有情况,减枝一定不正确的情况。
题目代码
将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
1,1,5;
1,5,1;
5,1,1;
问有多少种不同的分法。
输入
n,k (6<n<=200,2<=k<=6)
输出一个整数,即不同的分法。
样例输入
7 3
样例输出
4
题目说明
四种分法为:
1,1,5;
1,2,4;
1,3,3;
2,2,3;
题目思路
这种题目等价于将n个求分成m堆,有多少种分法。
1:递归解决。dfs(n,m)表示n个球分成m堆的分法,
dfs(n,m) = dfs(n-m,m)+dfs(n-1,m-1)
2:搜索解决。
暴力搜索枚举所有情况,减枝一定不正确的情况。
题目代码
#include <cstdio> #include <iostream> #include <map> #include <set> #include <vector> #include <stack> #include <cmath> #include <string> #include <cstring> #include <algorithm> #define LL long long #define INF 99999999 #define MOD 100003 int dfs(int n, int m){ if(m > n) return 0; if(m == n) return 1; if(m == 1) return 1; return dfs(n-m,m)+dfs(n-1,m-1); } int n, k, ans = 0; int main(){ scanf("%d%d",&n,&k); printf("%d\n",dfs(n,k)); return 0; }
#include <cstdio> #include <iostream> #include <map> #include <set> #include <vector> #include <stack> #include <cmath> #include <string> #include <cstring> #include <algorithm> #define LL long long #define INF 99999999 #define MOD 100003 int n, k, ans = 0; int a[10]; //cur 当前个数 sum当前总和 // num 当前数列中最小值 void dfs(int cur, int num, int sum){ if(sum >= n || cur >= k){ return ; } // sum+num 最后一个无需枚举 (减枝) if(sum + num <= n && cur == k - 1){ ans++; return ; } for(int i = num; i <= n-sum; i++){ dfs(cur+1, i, sum+i); } } int main(){ scanf("%d%d",&n,&k); dfs(0,1,0); printf("%d\n",ans); return 0; }
相关文章推荐
- 跳台阶问题|斐波那契递归的复杂度问题|整数划分问题
- 0002算法笔记——【递归】排列问题,整数划分问题,Hanoi问题
- 算法(1)整数划分问题之递归解决
- 整数划分问题(递归)
- 0002算法笔记——【递归】排列问题,整数划分问题,Hanoi问题
- 正整数划分问题(递归优化)
- 整数划分问题(递归策略)
- 算法笔记——【递归】整数划分问题
- 递归、加法原理,如何分解问题(独立且完备的划分)
- OpenJudge 简单的整数划分问题(递归)
- 递归--整数划分问题
- 整数拆分(划分)问题 递归
- 01算法笔记——【递归】排列问题,整数划分问题,Hanoi问题
- 整数划分问题--递归求解 例题:HDU 1028
- 0002算法笔记——【递归】排列问题,整数划分问题,Hanoi问题
- 整数划分问题(递归&非递归)
- 整数划分问题---动态规划、递归
- 递归求解整数划分问题
- 递归——整数划分问题
- 整数划分问题算法分析与实现(递归)