题目描述:给出K个数,使得这K个数的和为N,LCM为M,问有多少种.
裸DP啊……T T
设dp[i][j][k]表示取了i个数,和为j,LCM为k的时候的种数.
这样的话要开dp[100][1000][1000],需要优化.
首先第一维我们可以优化成滚动数组;其次,
因为LCM为M,那么中间状态的LCM肯定为M的约数,而且加入的数也肯定是M的约数,所以我们预处理出LCM的约数,
那么LCM和Ai只可能是那些约数,这样第三维又可以剪到40.最后开个dp[2][1000][40]就够了.
复杂度:O(100*1000*32*32) (枚举第K个数*枚举当前和*枚举当前数的值*枚举LCM)
#include
#include
#include
#include
#include
#include
#include
#include
#include