码迷,mamicode.com
首页 > 其他好文 > 详细

划分数

时间:2017-02-22 19:28:32      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:cin   tar   style   color   com   logs   ret   open   space   

有n个无区别的物品,将它们划分成不超过m组,求出划分方法数模M的余数

1<=m<=n<=1000   2<=M<=10000

 

这样的划分称作n的m划分

dp[i][j]:j的i划分的总数

考虑n的m划分a1,a2...am 如果对于每个i都有ai>0,那么{ai-1}就对应了n-m的m划分。如果存在ai=0,就对应了n的m-1划分

所以dp[i][j]=dp[i][j-i]+dp[i-1][j]

技术分享
 1 #include<iostream>
 2 #include<algorithm>
 3 #include<memory.h>
 4 #define INF 10000000
 5 using namespace std;
 6 const int max_n=1001;
 7 int n,m,M;
 8 int main()
 9 {
10     cin>>n>>m>>M;
11     int dp[m+1][n+1];
12     memset(dp,0,sizeof(dp));
13     dp[0][0]=1;
14     for(int i=1;i<=m;i++)
15     {
16         for(int j=0;j<=n;j++)
17         {
18             if(j-i>=0)
19             {
20                 dp[i][j]=(dp[i][j-i]+dp[i-1][j])%M;
21             }
22             else
23             {
24                 dp[i][j]=dp[i-1][j];
25             }
26         }
27     }
28     cout<<dp[m][n]<<endl;
29     return 0;
30 }
View Code

 

划分数

标签:cin   tar   style   color   com   logs   ret   open   space   

原文地址:http://www.cnblogs.com/wangkaipeng/p/6430483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!