Hrbust oj/哈理工 oj 1216数的划分
2016-09-03 20:19
183 查看
数的划分 | ||||||
| ||||||
Description | ||||||
将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。 例如:n=7,k=3,下面三种分法被认为是相同的。 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法。 | ||||||
Input | ||||||
有多则测试数据。 对于每组测试数据,仅有一行,包括两个整数n,k (6<n<=200,2<=k<=6)。 | ||||||
Output | ||||||
对于每组测试数据,输出一个整数,即不同的分法。 | ||||||
Sample Input | ||||||
7 3 | ||||||
Sample Output | ||||||
4 | ||||||
Hint | ||||||
输入: 7 3 输出:4 {四种分法为:1,1,5; 1,2,4; 1,3,3; 2,2,3;} | ||||||
Source | ||||||
NOIp2001高中组 | ||||||
Recommend | ||||||
黄李龙 |
题目分析:一开始想用dfs来做,用set和sort去重,失败了~
后来百度看了别人的才知道原来这样做 ↓
这样考虑假设 sum(n,m) 为和为n的m个元素组成的所有可能,按题目要求无论n和m是多少,都会分成两种情况:
1、这个集合中至少含有一个1。2、这个集合中不含有1。
即 sum(n,m) = sum(n-1,m-1) + sum(n-m,m) 我们可以举个栗子
**这样的话还是很难理解,我们假设有7个小球3个箱子,不允许有空箱子。sum(6,2)表示的是至少有一个箱子中是1个球,既然知道某个箱子肯定有1个球,那我们只需要把6个小球放到剩下的2个箱子中就可以了,sum(4,3)表示的是因为所有箱子中球的数目都大于1,我们先把3个小球放入箱子中即n-m,然后在将剩下的4个球放入3个箱子中即可。**
代码:
#include<iostream> using namespace std; int Sum(int n,int m){ if(n<m) return 0; //出现空箱子 else if(m==1) return 1; else if(n==m) return 1; else return Sum(n-1,m-1)+Sum(n-m,m); } int main(){ int n,m; while(cin>>n>>m) cout<<Sum(n,m)<<"\n"; }
相关文章推荐
- hrbust 1216/哈理工oj 1216 数的划分【dp】
- hrbust 哈理工oj 1541 集合划分【dp、0-1背包】
- hrbust 哈理工oj 1613 迷宫问题 bfs
- 哈理工oj Hrbustacm 1287 数字去重和排序II(STL 或着 hash 拉链法)
- 哈理工oj(acm.hrbust.edu.cn) 1419【dijkstra + 邻接表 + 堆优化】
- 哈理工oj(acm.hrbust.edu.cn) 1189【线段树】
- 哈理工oj hrbust 2267 从前的运算符【思维】
- hrbust 哈理工oj 2113 Count【STL水题】
- hrbust 哈理工oj 2042 序列问题【线段树+离散化】
- hrbust 1698/哈理工oj 1698 邂逅数塔【思维+快速打印素数表】
- hrbust/哈理工oj 1809 再就业【状压dp】
- hrbust/哈理工oj 1495 Robots on a grid【BFS+BFS+dp】
- 哈理工oj(acm.hrbust.edu.cn) 1522【单调队列】
- hrbust 2147 哈理工oj 经理办公室【水题】
- hrbust 哈理工oj 1570 田忌赛马【贪心】
- hrbust 哈理工oj 1834 括号匹配【好题】【floyd+dp】
- POJ 1579/hrbust 1029/哈理工oj 1029 Function Run Fun【记忆化搜索】
- hrbust 2080 哈理工oj 2080 链条【简单贪心】
- hrbust/哈理工oj Contest Print Server【模拟】
- hrbust 2115,哈理工oj 2115 Equal【dfs+剪枝】