博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[codevs 1039]数的划分
阅读量:4313 次
发布时间:2019-06-06

本文共 1091 字,大约阅读时间需要 3 分钟。

codevs 1039 数的划分

题目描述   Description                   

将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序)。问有多少种不同的分法。

例如:n=7,k=3,下面三种划分方案被认为是相同的。

1 1 5

1 5 1

5 1 1

输入描述   Input Description              

输入:n,k (6<n<=200,2<=k<=6)

输出描述  
Output Description              

输出:一个整数,即不同的分法。

样例输入  
Sample Input              

 7 3

样例输出  
Sample Output              

4

 

思路——划分型dp

f[i][j]是指将i划分成j部分的方案数

初始化f[0][0]=1

f[i][j]有意义(i>=j)的情况下满足公式 f[i][j]=f[i-1][j-1]+f[i-j][j]

 

解释:

分为两种情况 一种情况分出来的数中含1 另一种情况分出来的数中不含1

以下均以i分为j组举例

情况1:分离出一个1,那么剩余的i-1就只能划分成j-1个部分

情况2:不包含1    为了不包含1把最终所划分的j组每组都放上一个1,由于不能划分出0,因此不论剩下的数怎么划分,j组中都不可能有1.即将剩下的i-j分为j组

 

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 8 using namespace std; 9 10 int n,m,dp[210][7];11 int main()12 {13 scanf("%d%d",&n,&m);14 dp[0][0]=1;15 for(int i=1;i<=n;i++)16 {17 for(int j=1;j<=m;j++)18 {19 if(i>=j)dp[i][j]=dp[i-1][j-1]+dp[i-j][j];20 }21 }22 printf("%d",dp[n][m]);23 system("pause");24 return 0;25 }
View Code

 

 

转载于:https://www.cnblogs.com/taojy/p/7124851.html

你可能感兴趣的文章
linux文件目录类命令|--cp指令
查看>>
.net MVC 404错误解决方法
查看>>
linux系统目录结构
查看>>
git
查看>>
btn按钮之间事件相互调用
查看>>
Entity Framework 4.3.1 级联删除
查看>>
codevs 1163:访问艺术馆
查看>>
冲刺Noip2017模拟赛3 解题报告——五十岚芒果酱
查看>>
并查集
查看>>
sessionStorage
查看>>
代码示例_进程
查看>>
Java中关键词之this,super的使用
查看>>
人工智能暑期课程实践项目——智能家居控制(一)
查看>>
前端数据可视化插件(二)图谱
查看>>
kafka web端管理工具 kafka-manager【转发】
查看>>
获取控制台窗口句柄GetConsoleWindow
查看>>
Linux下Qt+CUDA调试并运行
查看>>
51nod 1197 字符串的数量 V2(矩阵快速幂+数论?)
查看>>
OKMX6Q在ltib生成的rootfs基础上制作带QT库的根文件系统
查看>>
zabbix
查看>>