软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 开发杂谈 -> hdu1521排列组合(指数型母函数) -> 正文阅读

[开发杂谈]hdu1521排列组合(指数型母函数)


题意: 有n种物品,并且知道每种物品的数量ki。要求从中选出m件物品的排数。         (全题文末)
 
知识点:
普通母函数
指数型母函数:(用来求解多重集的排列问题)
    n个元素,其中a1,a2,····,an互不相同,进行全排列,可得n!个不同的排列。
    若其中某一元素ai重复了ni次,全排列出来必有重复元素,其中真正不同的排列数应为 [img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403115930723-1169117193.png,即其重复度为ni!
    同理a1重复了n1次,a2重复了n2次,····,ak重复了nk次,n1+n2+····+nk=n。
    对于这样的n个元素进行全排列,可得不同排列的个数实际上是 [img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403115931473-121475162.png
 
    若只对其中的r个元素进行排列呢,那就用到了指数型母函数。
    构造母函数G(x)=[img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403115932223-1454046049.png+[img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403115932816-2023951248.png则称G(x)是数列a0,a1…an的指数型母函数。
    一般过程:
        1.建立模型:物品n种,每种数量分别为k1,k2,..kn个,求从中选出m个物品的排列方法数。
        2.构造母函数:G(x)=(1+ [img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403115933566-900588117.png+[img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403115934191-1910742279.png …+[img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403115935035-1573858022.png)(1+ [img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403115935707-1529170266.png+[img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403115939676-1373024036.png+…[img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403115940316-2107317941.png)…(1+ [img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403115941004-1121124645.png+[img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403120003004-1925168463.png+…[img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403120003707-535861454.png)
                                    =a0+a1·x+ [img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403120004457-1798407224.png · [img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403120005301-173611590.png +[img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403120006051-322974296.png · [img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403120009973-220315646.png+…[img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403120010566-193762707.png · [img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403120014613-1024113626.png (其中pp=k1+k2+k3…kn)
                          G(x)含义:ai为选出i个物品的排列方法数。
           若题中有限定条件,只要把第i项出现的列在第i项的式中,未出现的不用列入式中。
           如:物品i出现的次数为非0偶数,则原式改为…*(   [img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403120018426-745696631.png + [img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403120019301-506737047.png + [img]http://images2015.cnblogs.com/blog/778507/201604/778507-20160403120020144-563418436.png    )*…
 
题解:
标准指数型母函数题。


#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
double a[15],b[15],num[15];
 
double jiecheng(int n)
{
    double ans=1.0;
    for(int i=1;i<=n;i++)
        ans*=i;
    return ans;
}
 
int main()
{
    int n,m;
    while(cin>>n>>m){
    for(int i=1;i<=n;i++)
        cin>>num[i];
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    //a[0]=1.0;
    for(int i=0;i<=num[1];i++)
        a[i]=1.0/jiecheng(i);
    for(int i=2;i<=n;i++)
    {
        for(int j=0;j<=m;j++)
        {
            for(int k=0;k<=num[i]&&j+k<=m;k++)
            {
                b[j+k]+=a[j]/jiecheng(k);
            }
        }
        for(int j=0;j<=m;j++)
        {
            a[j]=b[j];
            b[j]=0;
        }
    }
    printf("%.0lf\n",a[m]*jiecheng(m));
    }
     
}

排列组合
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
Submit Status
Description
有n种物品,并且知道每种物品的数量。要求从中选出m件物品的排列数。例如有两种物品A,B,并且数量都是1,从中选2件物品,则排列有"AB","BA"两种。
Input
每组输入数据有两行,第一行是二个数n,m(1<=m,n<=10),表示物品数,第二行有n个数,分别表示这n件物品的数量。
Output
对应每组数据输出排列数。(任何运算不会超出2^31的范围)
Sample Input
2 2 1 1
Sample Output
2


......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-04-03 20:46:48  
开发杂谈 最新文章
BloomFilter
大学四年编程之历程
内核分析
造人论坛——意识的本质和一个人工脑模型
OFDM信号[matlab描述]
人类还会进化吗?
HDUACM1035RobotMotion简单模拟题
树、二叉树(二)
iisphpweb.config处理404,500等,跳转友好
DatabaseAsaFortress
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-20 7:32:15
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --