noi.openjudge_P8787数的划分
2017-05-20 22:06
274 查看
题目:
8787:数的划分
总时间限制:
1000ms
内存限制:
65536kB
描述
输入
两个整数n,k (6 < n <= 200,2 <= k <= 6),中间用单个空格隔开。
输出
一个整数,即不同的分法。
样例输入
样例输出
提示
四种分法为:1,1,5;1,2,4;1,3,3;2,2,3。
来源
NOIP2001复赛 提高组 第二题
————————————————————————————————————————
测评网址:数的划分(戳我)
推荐用记忆化搜索,代码比动态规划会短很多,省脑经。
记忆的表达:f[i][j] = 把i划分成j个的方法总数。
那么,当j == 0或 i < j时,自然返回0。
当j == 1时,返回1
解决!好了,上代码:
8787:数的划分
总时间限制:
1000ms
内存限制:
65536kB
描述
将整数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。
来源
NOIP2001复赛 提高组 第二题
————————————————————————————————————————
测评网址:数的划分(戳我)
推荐用记忆化搜索,代码比动态规划会短很多,省脑经。
记忆的表达:f[i][j] = 把i划分成j个的方法总数。
那么,当j == 0或 i < j时,自然返回0。
当j == 1时,返回1
解决!好了,上代码:
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> int f[1001][1001]; const int inf = 0x3f3f3f3f; int get_ans(int n,int m) { if(n<m||m==0)return f [m] = 0; if(f [m]!=inf)return f [m]; if(m==1)return f [m] = 1; return get_ans(n-1,m-1)+get_ans(n-m,m); } int main() { int n,k; std::cin>>n>>k; memset(f,0x3f,sizeof(f)); std::cout<<get_ans(n,k); return 0; }
相关文章推荐
- OpenJudge-Noi 2000 最长公共子上升序列
- Openjudge-noi 2985 数字组合
- noi.openjudge 1.12.6
- 【搜索】—深搜遍历 noi openjudge 2.5 A Knight's Journey
- 【noi.openjudge】7627 鸡蛋的硬度
- NOI OpenJudge 726 ROADS
- Openjudge NOI题库1.11编程基础之二分查找07 和为给定数
- OpenJudge-Noi 1750 全排列
- OpenJudge-Noi 1996 登山
- Openjudge-NOI题库-蛇形填充数组
- NOI.OPENJUDGE 1.13.26 感想
- 一本通上的某动态规划题:股票买卖(openjudge->NOI->2.6->8464)
- noi.openjudge 1.13.44
- 【DP】 noi openjudge 2.6 乘积最大
- 【DP】 noi openjudge 2.6 山区建小学
- noi.openjudge 2469:电池的寿命 贪心
- POJ 3979 && NOI.openjudge 2424 Tiling a grid with dominoes(递推/递归)
- NoiOpenJudge 1.13 数根
- NoiOpenJudge 2.5 城堡问题
- OpenJudge Noi 3532 最大上升子序列和(dp)