zoukankan      html  css  js  c++  java
  • 1834. 分组选项(复杂)

    1834. 分组选项

    中文English

    现在有nn个人在排成一排。他们必须从左到右分成连续的mm组。如果每个组的人数都必须大于等于其左边的组的人数,请问一共有多少种不同的分组方式。对于两个分组而言,当且仅当按递增序排列以后是不同的,他才是不同的分组。例如,[1, 1, 1, 3][1, 1, 1, 2]不同,但和[1, 3, 1, 1]相同。

    样例

    Input:
    8
    4
    Output: 5
    Explanation: [1, 1, 1, 5], [1, 1, 2, 4], [1, 1, 3, 3], [1, 2, 2, 3], [2, 2, 2, 2]
    

    注意事项

    1 leq n,m leq 2001n,m200

    输入测试数据 (每行一个参数)如何理解测试数据?
    class Solution:
        """
        @param n: the number of people
        @param m: the number of groups
        @return: the number of grouping options
        """
        '''
        大致思路:
        1.首先先判断,将可以直接得的直接返回
        2.f[i][j] = f[i][j] + f[i - j][1] + f[i - j][2] + ... + f[i - j][m] 转移方程
        '''
        def groupingOptions(self, n, m):
            if m > n:return 0 
            
            #
            f = [[0]*(n + 1) for _ in range(n + 1)]
            #如果m和n相等的话,就赋值1
            for i in range(n + 1):
                f[i][i] = 1
            
            #计算顺序
            for i in range(2, n + 1):
                for j in range(1,i):
                    for k in range(1,j + 1):
                        f[i][j] = f[i][j] + f[i - j][k]
            
            return f[n][m]
  • 相关阅读:
    双栈排序
    Koishi Loves Segments
    [USACO14FEB] Cow Decathlon 牛的十项全能
    [HNOI2016]网络
    koishi的数学题
    邦邦的大合唱站队
    #613(div2)
    Educational Codeforces Round 77
    #Hello 2020
    #601 (Div. 2)
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13118069.html
Copyright © 2011-2022 走看看