NOIP 2001 数的划分
2015-08-31 18:45
148 查看
问题描述
将整数 nn 分成 kk 份,且每份不能为空,任意两份不能相同 (不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
{1,1,5} , {1,5,1}, {5,1,1}
问有多少种不同的分法。
输入:n,k
输出:一个整数,即不同的分法。
样例
输入: 7 3
输出:4
四种分法为:{1,1,5},{1,2,4},{1,3,3},{2,2,3}
(6<n<=200,2<=k<=6)(6
记 f(i,j)f(i,j) 为 k=ik = i,n=jn = j ,即将 jj 分成 ii 份时的方案数。
f(1,1)=1f(1,1) = 1
f(i,j)=f(i−1,j−1)+f(i,j−i)∗[j>i]f(i,j) = f(i - 1,j - 1) + f(i,j - i)*[j > i]
分两种情况讨论:
1.划分出的最小数为 11,方案数为 f(i−1,j−1)f(i-1,j-1),即在将 j−1j - 1 分成 i−1i - 1 份的划分方案的基础上再多划分一个数 11 的方案数。
2.划分出的最小数大于 11,方案数为 f(i,j−i)f(i,j-i),即将 j−ij - i 分成 ii 份时划分出的 ii 个数都加上 11 的方案数。
真是很有意思的思路。。。
将整数 nn 分成 kk 份,且每份不能为空,任意两份不能相同 (不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
{1,1,5} , {1,5,1}, {5,1,1}
问有多少种不同的分法。
输入:n,k
输出:一个整数,即不同的分法。
样例
输入: 7 3
输出:4
四种分法为:{1,1,5},{1,2,4},{1,3,3},{2,2,3}
(6<n<=200,2<=k<=6)(6
记 f(i,j)f(i,j) 为 k=ik = i,n=jn = j ,即将 jj 分成 ii 份时的方案数。
f(1,1)=1f(1,1) = 1
f(i,j)=f(i−1,j−1)+f(i,j−i)∗[j>i]f(i,j) = f(i - 1,j - 1) + f(i,j - i)*[j > i]
分两种情况讨论:
1.划分出的最小数为 11,方案数为 f(i−1,j−1)f(i-1,j-1),即在将 j−1j - 1 分成 i−1i - 1 份的划分方案的基础上再多划分一个数 11 的方案数。
2.划分出的最小数大于 11,方案数为 f(i,j−i)f(i,j-i),即将 j−ij - i 分成 ii 份时划分出的 ii 个数都加上 11 的方案数。
真是很有意思的思路。。。
相关文章推荐
- 动画transform属性
- uvaoj 11137 - Ingenuous Cubrency
- 敏捷自动化测试(4)——围绕自动化测试开展持续集成(转)
- 利用vanitygen生成比特币个性地址的教程
- 关于比特币区块链,你所需要了解的
- hihococder14(1)不等式
- JQuery Mobile入门——预加载页面
- 欢迎使用CSDN-markdown编辑器
- 字符串的排列
- linux下ppp的移植及ppp0路由设置
- 比特币交易手续费(Transaction Fees)怎么计算?
- php获取远程图片并把它保存到本地
- 自来水很滑
- C++中map容器的使用说明
- iOS保存model数据(自定义Model 可以存放到本地)
- JSON特殊字符处理
- c++ boost string split trim replace
- 就从今天开始
- shell
- MD5加密