1 solutions

  • 0
    @ 2024-4-17 19:08:40

    解法一:

    首先要想到,当总共有m种玩具,数量分别为a[1..m]时,可选择的天数为Π(a[i]+1)。

    现在给定了可选天数n,那么问题成了:将n分解为若干正整数的乘积,求每种划分的正整数-1之和的所有可能。

    由于每种划分的数字数量不会很多,可以考虑用dfs解决这个问题,即dfs时每次枚举一个正整数,时刻保证乘积不超过n,当乘积等于n时,得到一种可能的答案。

    根据dfs实现的效率不同,可得30~50分。

    解法二:

    dfs时可以不用枚举每一个数,只需要枚举(n/当前乘积)的每一个约数即可。根据枚举约数的方式不同,可得60~100分。

    其中,枚举约数最快的一个方法是,首先预处理出n的所有约数,每次只要从这些数里面找(n/当前乘积)的约数即可。为了进一步提高效率,可以强制令每次枚举出的a[i]不大于a[i-1],从而避免一些重复答案。

    • 1

    Information

    ID
    374
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    8
    Tags
    (None)
    # Submissions
    18
    Accepted
    6
    Uploaded By