蓝桥杯 数的划分 By Assassin [dp水题]
来源:互联网 发布:数据分析师去哪里考试 编辑:程序博客网 时间:2024/04/29 18:00
问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。 例如: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
这是一个三维的dp就可以了,挺常规的题目。思路就是dp[i][j][s] ,其中i代表当前用了k份中的i份位置,j代表当前总数为j,s表示在当前i位置使用的数的大小是s。
还有注意到题目中说下面三种分法被认为是相同的。
1,1,5; 1,5,1; 5,1,1;
也就是说排序过后相同的数组是相同结果,那么我们构造一下,每次第三维s选数的时候总是不小于上一位的选择的数即可。
递归公式为
最后求sum(dp[k][n][s]) 即可 1<=s<=n
#include<bits/stdc++.h>using namespace std;int dp[7][201][201]={0}; //dp[i][j][k] 相当于第i个位置总数为j,当前位置个数为k int n,k;int main(){ scanf("%d%d",&n,&k); for(int i=1;i<=n;i++){ //初始化 dp[1][i][i]=1; } for(int i=2;i<=k;i++){ //第几个 for(int j=1;j<=n;j++){ //第i个总个数 for(int s=1;s<=n;s++){ //第i个数量 for(int t=s;t<=n;t++){ //第i-1个的位置选择的数的大小 if(s<j){ dp[i][j][s]+=dp[i-1][j-s][t]; } } } } } int ans=0; for(int i=1;i<=n;i++){ ans+=dp[k][n][i]; } cout<<ans<<endl; return 0;}
0 0
- 蓝桥杯 数的划分 By Assassin [dp水题]
- 蓝桥杯 算法训练 方格取数 By Assassin [多线程dp]
- 蓝桥杯 结点选择 By Assassin 简单的树形dp复习
- 蓝桥杯 算法训练 乘积最大 By Assassin [dp水题]
- 蓝桥杯 幸运数 By Assassin 打表?
- 蓝桥杯 算法训练 Cowboys By Assassin dp+字符串操作
- 蓝桥杯 带分数 By Assassin
- 【划分型DP】数的划分
- 数的划分问题 【DP】
- Codevs_P2711 数的划分(DP)
- OpenJudge_P8787 数的划分(DP)
- DP专题--数的划分
- 数的划分 搜索 ,DP
- HDU 2686 Matrix By Assassin 多线程dp
- 蓝桥杯 表达式计算 By Assassin
- 蓝桥杯 最大最小公倍数 by Assassin
- 蓝桥杯 大臣的旅费 By Assassin 树的最大直径
- 蓝桥杯 旅行家的预算 By Assassin [复杂的贪心]
- 利用HTML+CSS实现常见的单列布局
- 动态规划(01背包问题)
- org.hibernate.exception.GenericJDBCException: Cannot release connection
- CoreData的使用/以及coreData中的多线程问题/版本迁移(二)
- 【JavaScript】关于竖号(||) 写组件的模式
- 蓝桥杯 数的划分 By Assassin [dp水题]
- 测试
- openssl将私钥和crt证书合成pfx证书
- hadoop集群环境初步试验
- Java堆内存的划分
- 手机上使用MARSIOT去远程控制树莓派的简单教程
- bt tracker的命令执行
- Eclipse C++找不到头文件
- navicat+for+mysql+10.0.11简体中文破解版(有破解码)