HDU 1521 排列组合
2011-06-11 13:26
246 查看
#include <iostream> using namespace std; double facots[]={1,1,2,6,24,120,720,5040,40320,362880,3628800}; /*求排列数的母函数。 ans=m!/(n1!*n2!*n3!……*nk!) m 其中∑ nk =m ,因为刚好选定m件物品。 k=1 意思就是同一种物品无论怎么排列都只算做一种,所以当选某一件物品k次时就要 除以k! 例如某一堆有3件物品 现在要取2件,那么排列数为2!,而事实上它2!种都是相同的,这也就是所谓的分组排列 */ int main(){ int n,m; while(cin>>n>>m){ double num[11],c2[11]={0},c1[11]={0}; int i,j,k; for(i=0;i<n;i++) cin>>num[i]; for(i=0;i<=num[0];i++) c1[i]=1.0/facots[i]; //一种哈希计数,这里是母函数值的入口 for(i=1;i<n;i++){ for(j=0;j<=m;j++) //前种物品 for(k=0;k<=num[i] && k+j<=m;k++) c2[j+k]+=(c1[j]/facots[k]); //更新后一种物品,取了k件物品所以除以k! for(j=0;j<=m;j++) c1[j]=c2[j],c2[j]=0; } double p=c1[m]*1.0*facots[m];//还原原来的系数 printf("%.0lf/n",p); } return 0; }
相关文章推荐
- HDU_1521 排列组合 (指数型生成函数)
- [省选前题目整理][HDU 1521]排列组合(生成函数)
- hdu-1521-排列组合(母函数)
- hdu1521 排列组合(指数型母函数)
- hdu(1521)——排列组合
- hdu1521-排列组合
- [HDU 1521] 排列组合 指数型母函数
- HDU 1521 排列组合(指数型母函数)
- hdu 1521 排列组合 指数型母函数
- [ACM] hdu 1521 排列组合(指数型母函数)
- HDU 1521 排列组合
- [ACM] hdu 1521 排列组合(指数型母函数)
- HDU - 1521 排列组合 [指数型母函数]
- HDU-1521 排列组合 (指数型母函数)
- Hdu 1521 排列组合
- HDU 1521 排列组合
- [ACM] hdu 1521 排列组合(指数型母函数)
- HDU - 1521 排列组合 (指数型母函数)
- 【hdu 1521】【标准的指数型母函数】排列组合【求多重集的排列数】
- HDU 1521 排列组合