Codevs_P2711 数的划分(DP)
来源:互联网 发布:淘宝企业店铺公示地址 编辑:程序博客网 时间:2024/05/08 12:02
题目描述 Description
将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的:
1,1,5;
1,5,1;
5,1,1;
你的程序将对给定的n和k,计算有多少种不同的分法并输出。
输入描述 Input Description
输入文件有两个整数n和k (6< n≤200,2≤k≤11)。
输出描述 Output Description
输出文件只有一行,即输出不同的分法。
样例输入 Sample Input
7 3
样例输出 Sample Output
4
数据范围及提示 Data Size & Hint
(6< n≤200,2≤k≤11)。
思路:
dp[i,j]表示将i分成j份的方案数。
dp[i,j]:=dp[i-j,1]+dp[i-j,2]+dp[i-j,3]+…+dp[i-j,j-1]+dp[i-j,j];
时间复杂度是n*k^2。O(n*k)的方法:
由于,
dp[i,j]=dp[i-j,1]+dp[i-j,2]+…+dp[i-j,j];
dp[i-1,j-1]=dp[(i-1)-(j-1),1]+dp[(i-1)-(j-1),2]+…+dp[(i-1)-(j-1),j-1]
=dp[i-j,1]+dp[i-j,2]+…+dp[i-j,j-1];
因此,
dp[i,j]=dp[i-j,1]+dp[i-j,2]+…+dp[i-j,j-1]+dp[i-j,j]
=dp[i-1,j-1]+dp[i-j,j];
#include <iostream>using namespace std;int n,k;int dp[205][10];int main(){ cin >> n >> k; dp[0][0] = 1; for(int i=1; i<=n; i++) { for(int j=1; j<=k; j++) { if(i>=j) dp[i][j]=dp[i-j][j]+dp[i-1][j-1]; } } cout << dp[n][k];}
1 0
- Codevs_P2711 数的划分(DP)
- 【划分型DP】数的划分
- 数的划分问题 【DP】
- OpenJudge_P8787 数的划分(DP)
- DP专题--数的划分
- 数的划分 搜索 ,DP
- [NOIP 2001]数的划分 DP
- 有关计数问题的DP 划分数
- 有关计数问题的DP 划分数
- Luogu-P1025数的划分(dp)
- 基础DP学习之【数的划分】
- wikioi-天梯-普及一等-划分dp-1039:数的划分
- 维基oi 1039 数的 划分 划分dp
- wikioi1039数的划分(划分型dp)
- CODEVS 1039 数的划分(划分型DP)
- <划分DP>【noip 2001】codevs 1039 数的划分
- 划分数(DP)
- 划分数问题 DP
- 如何使用excel画甘特图
- Html定义网页背景色
- Codeforces Educational Codeforces Round 2 B. Queries about less or equal elements
- 027.迭代器 Iterator
- hpuoj 1716: 感恩节KK专场——考试来了 【水题】【校赛】
- Codevs_P2711 数的划分(DP)
- 使用JDBC操作时间的注意点
- 安卓学习--百分比适配
- (未完)逆波兰计算器功能分层:
- 发布iOS企业分发(二)(iOS开发环境配置)
- 相机曝光与增益
- hdoj--2516--取石子游戏(博弈)
- ubuntu默认开启numlock
- Java集合中HashMap的实现原理