划分型dp
来源:互联网 发布:warframe淘宝白金 编辑:程序博客网 时间:2024/06/01 09:27
1、把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问有多少种不同的分法。
#include<iostream>#include<string.h>using namespace std; int dp[20][20]={0};int m,n; int main(){ int t; cin>>t; while(t--){ memset(dp,0,sizeof(dp)); cin>>m>>n; //题目中的i和j都是有实际意义的,不能for(int i=0;i<n;i++) //0个苹果,就一种放法 for(int i=1;i<=n;i++){ dp[0][i]=1; } //1个盘子,就一种放法,不能有0个盘子 for(int i=1;i<=m;i++){ dp[i][1]=1; } for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ //盘子比苹果多,没用 if(j>i) dp[i][j]=dp[i][i]; //盘子比苹果少,可以先每个盘子都放一个,dp[i-j]][i]; //也可以这个盘子空着,dp[i][j-1] else dp[i][j]=dp[i-j][j]+dp[i][j-1]; } } cout<<dp[m][n]<<endl; } return 0;}
2、把m个同样的苹果放在n个同样的盘子里,不允许有的盘子空着不放,问有多少种不同的分法。
相似问题:数的划分
题目描述 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
#include<iostream>#include<string.h>#include<stdio.h>using namespace std;int dp[201][10];int k,n;int main(){ cin>>n>>k; memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++){ dp[i][1]=1; } /*绝对不能这样初始化,因为不允许有空盘子 for(int i=1;i<=n;i++){ dp[0][i]=1; } */ //0个盘子,0个苹果,肯定是1 dp[0][0]=1; for(int i=1;i<=n;i++){ for(int j=1;j<=k;j++){ //要是盘子比苹果多了,那么肯定有盘子是空的,不符合要求 if(j>i)continue; dp[i][j]=dp[i-j][j]+dp[i-1][j-1]; } } cout<<dp[n][k]<<endl; return 0;}
阅读全文
0 0
- 【划分型DP】整数划分
- 划分型DP
- 划分型循环DP
- 划分型DP相关
- 划分型dp
- 【划分型DP】数的划分
- 【划分型DP】乘积最大
- 【划分型DP】数字游戏
- wikioi1039数的划分(划分型dp)
- CODEVS 1039 数的划分(划分型DP)
- [poj 1191] 棋盘分割 划分型DP
- 【划分型DP】统计单词个数
- <划分型DP>【noip 2000】乘积最大
- 集合划分 DP
- 划分数(DP)
- 划分数问题 DP
- 划分问题(dp)
- 区间DP 整数划分
- KinectFusion中用到的TSDF Fusion
- 终于还是烤焦了
- 设计模式-策略模式(java)
- 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )
- ActiveMQ的消息形式
- 划分型dp
- 软件工程(C编码实践)学习总结和感悟
- 基于temporal segment networks的行为识别
- jsp/servlet第四章第二节Jsp四大作用域
- HDU 3535:AreYouBusy
- SpringBoot外部配置
- 获取url参数,分离url里面的参数
- SpringBoot的入门搭建(二)
- Spring依赖注入