n的m划分 dp
来源:互联网 发布:永宏plc编程软件下载 编辑:程序博客网 时间:2024/04/28 05:22
计数问题的dp。
将n个无区别的物品,划分成不超过m组,求划分数。
如n=4,m=3,结果是4(1+1+2=1+3=2+2=4)
设dp[i][j]表示i的j划分,dp[i][j]=dp[i-k][j-1]. k∈[1,min(i,j-1)]. 理解为从i个物品中取走k个,剩下的i-k个物品组成j-1种划分。
但是,这个划分是错误的,会造成重复的划分不止记录一次。
我们假设n的m划分最后的划分完的情况为ai(∑i=1,m =n).于是如果ai>0 ,划分就等同于ai-1,也就是n-m的m划分,从每一堆中取出一个。如果ai==0 划分等同于n的m-1划分。
于是最终递推关系为:
dp[0][0]=1;
if(i>=j)
dp[i][j]=dp[i-j][j]+dp[i-1][j]
else
dp[i][j]=dp[i-1][j];
注意这里是将n划分为不超过m组,所以ai=0是存在的
#include<iostream>
using namespace std;
int dp[10][10];
int main()
{
int n,m;
cin>>n>>m;
int i,j;
dp[0][0]=1;
for(i=0;i<=n;i++)
for(j=1;j<=m;j++)
if(i>=j)
dp[i][j]=dp[i-j][j]+dp[i][j-1];
else
dp[i][j]=dp[i][j-1];
cout<<dp[n][m]<<endl;
return 0;
}
0 0
- n的m划分 dp
- 关于计数 dp 中 n 的 m 划分的理解
- 划分数, n的m划分 [dp计数] 《挑战程序设计竞赛》2.3
- NYOJ 746 - 正整数n划分为m段,求m段的最大乘积 【区间DP】
- hdu 1028 对某个数n的m划分数
- Ignatius and the Princess III(n的m划分)
- NYOJ 176 、POJ 1664 —— m划分为n个正整数的划分个数
- 整数划分n>m情况讲解
- 划分数 不超过m组 dp
- hdu1024 最大m段和 划分dp
- N的整数划分
- 将n划分成最大数不超过m的划分数
- NYOJ 1103 —— m划分为n个正整数的个数
- 【51nod 1201】【DP + 思维】整数划分【将N分为若干个不同整数的和,求划分数】
- M*N的矩阵
- m的n次方
- 【划分型DP】数的划分
- 正整数n的划分数
- Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
- Android发送短信
- Android复习笔记(6) -BrodCastReceiver (广播接收者
- 【算法总结】堆及堆排序总结
- 不要把你的input元素设置为“action”或“submit”
- n的m划分 dp
- 数据结构之栈和队列---回文判断
- 丢掉那些所谓的真理,来看看如何做好产品?
- AAC 编解码封装
- 实现页面打印(JS 、JQuery)
- Android复习笔记(7) -发送广播
- 简单地说说 tigase
- cmd 中连接mysql时报'mysql'不是内部或外部命令,也不是可运行的程序或批处理文件?
- python 闭包