1039 数的划分

2001年NOIP全国联赛提高组

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
 
 
题目描述 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

数据范围及提示 Data Size & Hint

{四种分法为:1,1,5;1,2,4;1,3,3;2,2,3;}

贴出代码:
#include<bits/stdc++.h>
using namespace std; int main()
{
int n,k;
cin >> n >> k;
int dp[][];
for(int i=;i <= n;i++)
{
dp[i][] = ;
dp[i][i] = ;
}
for(int i=;i <= n;i++)
{
for(int j=;j < i;j++)
{
dp[i][j] = dp[i-][j-] + dp[i-j][j];
}
}
cout << dp[n][k] << endl; return ;
}

代码解释:

首先分析第一段:

for(int i=;i <= n;i++)
{
dp[i][] = ;
dp[i][i] = ;
}

dp[第几个数][划分几次]   无论什么数划分1次的结果都是只有一种情况,无论什么数划分和他位数相同的数的结果只有一种情况。

然后分析第二段:

for(int i=;i <= n;i++)
{
for(int j=;j < i;j++)
{
dp[i][j] = dp[i-][j-] + dp[i-j][j];
}
}

这个我一开始也思考不明白,感觉和传统的dp有点不同,结合了各个博客的解释稍微理解了点。

主要思想:分为有1存在和没有1存在两种情况

有1存在:dp[i-1][j-1] 表示的是将i分为最小值为1的方案的总个数,例如,6(=7-1)分成2(=3-1)份可以分为{1,5}{2,4}{3,3},则7可以分为{1,5,1}{2,4,1}{3,3,1}【共3种】

没有1存在:dp[i-j][j-1]]表示的是将i分为不包含1的方案的总个数,例如,4(=7-3)分成3份可以分为{1,1,2},则7可以分为{1+1,1+1,2+1}->{2,2,3}【共1种】注意下划线部分

由此构成了如下的递推式:

 dp[i][j] = dp[i-1][j-1] + dp[i-j][j];

dp练习(8)——数的划分的更多相关文章

  1. 【dp】p1025数的划分

    题目描述] 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5: 1,5,1: 5,1,1: 问有多少种不同的分法. 输 ...

  2. 【dfs】p1025 数的划分

    P1025 数的划分 题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有 ...

  3. codevs——1039 数的划分

    1039 数的划分 2001年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 将整数 ...

  4. P1025 数的划分——简单题刷傻系列

    P1025 数的划分 学傻了,学傻了,什么dp搜索什么啊: #include<cstdio> #include<cstring> #include<algorithm&g ...

  5. luoguP1025+codevs 1039 数的划分 x

    luoguP1025 + codevs1039 数的划分 2001年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Des ...

  6. NOIP2001 数的划分

    题二 数的划分(20分) 问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问 ...

  7. C语言 · 数的划分

    算法训练 数的划分   时间限制:1.0s   内存限制:256.0MB        锦囊1 使用动态规划. 锦囊2 用F[i,j,k]表示将i划分成j份,最后一份为k的方案数,则F[i,j,k]= ...

  8. P1025 数的划分

    P1025 数的划分f[i][j]表示把数i分成j份的方案数,分成两种情况,第一种是最小值是1,另一种是最小值不是1,对于不是1的情况,先都放一个1,那么f[i][j]=f[i-1][j-1]+f[i ...

  9. 数的划分(NOIP2001&水题测试2017082401)

    题目链接:数的划分 这题直接搜索就行了.给代码,思路没什么好讲的,要讲的放在代码后面: #include<bits/stdc++.h> using namespace std; int d ...

随机推荐

  1. angularjs 路由参数

    .state('classrooms',{ url: '/classrooms/:id' }) .state('classrooms',{ url: '/classrooms/{id}' }) .st ...

  2. P1771 方程的解_NOI导刊2010提高(01)

    P1771 方程的解_NOI导刊2010提高(01) 按题意用快速幂把$g(x)$求出来 发现这不就是个组合数入门题吗! $k$个人分$g(x)$个苹果,每人最少分$1$个,有几种方法? 根据插板法, ...

  3. P2880 [USACO07JAN]平衡的阵容Balanced Lineup

    P2880 [USACO07JAN]平衡的阵容Balanced Lineup RMQ RMQ模板题 静态求区间最大/最小值 (开了O2还能卡到rank9) #include<iostream&g ...

  4. troubleshooting-windows 在 CDH集群环境读取 Hive 表 KrbException: Cannot locate default realm

    KrbException: Cannot locate default realm 解决办法 1)拷贝需要组件的配置文件到项目中的 /resources/目录.如hadoop,目录/etc/hadoo ...

  5. win10 nodejs指定ionic版本安装(npm方式)

    步骤1 node-v6.11.3-x64.msi 下载安装node-v6.11.3-x64.msi, 安装完成后利用cmd通过npm安装 ionic cordova cmd npm install - ...

  6. 20145227鄢曼君《网络对抗》shellcode注入&Return-to-libc攻击深入

    20145227鄢曼君<网络对抗>shellcode注入&Return-to-libc攻击深入 shellcode注入实践 shellcode基础知识 Shellcode实际是一段 ...

  7. 小工具:使用Python自动生成MD风格链接

    很久之前我在Github上搞了一个LeetCode的仓库,但一直没怎么维护.最近发现自己刷了不少LC的题目了,想搬运到这个仓库上. 玩Github最重要的当然是写README了,MD的逼格决定了项目牛 ...

  8. trust zone之我见【转】

    本文转载自:https://blog.csdn.net/hovan/article/details/42520879 老板交待任务,这个星期我都在研究trust zone的东东,之前有看过代码,但没有 ...

  9. tslib移植笔记(1)【转】

    本文转载自:https://blog.csdn.net/zijie_xiao/article/details/50740950 tslib移植笔记(1)2016-04-25 tslib背景[摘自百度] ...

  10. javascript 构造函数类和原型 prototyp e定义的属性和方法的区别

    1.把方法写在原型中比写在构造函数中消耗的内存更小,因为在内存中一个类的原型只有一个,写在原型中的行为可以被所有实例共享,实例化的时候并不会在实例的内存中再复制一份而写在类中的方法,实例化的时候会在每 ...