zoukankan      html  css  js  c++  java
  • 洛谷 P1358 扑克牌

    题目描述

    组合数学是数学的重要组成部分,是一门研究离散对象的科学,它主要研究满足一定条件的组态(也称组合模型)的存在、计数以及构造等方面的问题。组合数学的主要内容有组合计数、组合设计、组合矩阵、组合优化等。

    随着计算机科学的日益发展,组合数学的重要性也日渐凸显,因为计算机科学的核心内容是使用算法处理离散数据。

    今天我们来研究组合数学中的一个有趣的问题,也是一个简单的计数问题:

    从一副含有n(n≤10000)张的扑克牌[显然每张扑克牌都不相同]中,分给m(m≤100)个人,第i个人得到ai (0≤ai≤100)张牌,求一共有几种分法,这个数可能非常大,请输出此数模10007后的结果。

    输入输出格式

    输入格式:

     

    第一行两个整数 为 n m

    第二行 m个整数 ai

     

    输出格式:

     

    此数模10007后的结果

     

    输入输出样例

    输入样例#1: 复制
    【样例输入1】
    5 2
    3 1
    【样例输入2】
    20 19
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
    
    输出样例#1: 复制
    【样例输出1】
    20
    
    【样例输出2】
    8707
    
    

    说明

    【数据规模】对于50%的数据,M = 1。

    思路:数学+杨辉三角。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,m,t;
    long long ans=1;
    long long map[10005][105];
    int main(){
        scanf("%d%d",&n,&m);
        map[0][0]=1;
        for(int i=1;i<=10000;i++)
            for(int j=0;j<=100;j++)
                  map[i][j]=(map[i-1][j-1]+map[i-1][j])%10007;
        for(int i=1;i<=m;i++){
            scanf("%d",&t);
            ans=ans*map[n][t]%10007;
            n-=t;
        }
        cout<<ans;
        return 0;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    Elasticsearch 机制 架构 集群 选举
    《Leo the late bloomer》阿虎开窍了
    各行业发明专利排行榜
    接口响应 越来越慢
    知识产权代理 与 工作流
    MBA Business Org Responsbility Account Stock
    心理学 防内耗
    Apache Kafka Zookeeper Quorum
    The different aspect of architecture(架构的不同方面)
    hPaPaas low-code/no-code 低代码
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7899026.html
Copyright © 2011-2022 走看看