划分数
2016-07-31 18:23
204 查看
//划分问题:将n个无区别的问题,划分成不超过m组,求划分方法数模M的余数 //n的m划分数,记为dp[m] //记每一组物品的个数为a[i],1<=i<=m,显然a[i]>=0 //如果对于任意1<=i<=m,有a[i]>0,则{a[i]-1}就对应n-m的m划分数,即为dp[m][n-m] //如果存在一个a[i]等于0,就对应着n的m-1划分数,即为dp[m-1] //所以dp[m] =dp[m][n-m]+dp[m-1] //时间复杂度为O(nm) #include<iostream> #include<cstdio> using namespace std; const int maxn=1000+5; int dp[maxn][maxn]; int M; int n,m; void solve() { dp[0][0]=1; for(int i=1;i<=m;i++){ for(int j=0;j<=n;j++){ if(j>=i){ dp[i][j]=(dp[i][j-i]+dp[i-1][j])%M; } else{ dp[i][j]=dp[i-1][j]%M; } } } printf("%d\n",dp[m] ); } int main() { scanf("%d%d%d",&n,&m,&M); solve(); return 0; }
相关文章推荐
- 有关子网划分的困惑
- 整数划分
- IP地址划分实例
- IP地址的划分
- 软件人才的层次划分
- BZOJ 3511 土地划分
- 【cl】预处理&划分测试集、训练集
- 算法训练 数的划分
- FPGA价格划分和预估【转载】
- 【bzoj1821】[JSOI2010]Group 部落划分 Group Kruskal
- 子网划分实例
- MOOC 简单的整数划分问题
- 中华人民共和国行政区域划分
- LeetCode 25 Reverse Nodes in k-Group Add to List (划分list为k组)
- Location属性划分图
- 硬盘划分主分区、扩展分区、逻辑分区、活动分区有什么不同?
- ip的划分
- 如何划分子网?
- 如何根据学生各科及总分成绩划分等第
- 划分数, n的m划分 [dp计数] 《挑战程序设计竞赛》2.3