(n<=30,是个多维的DP) v数组就是用来计算权值的,一共有m+1个.将S看做一个二进制数,按照题目S的定义,相当于在S的每一位可以随便+1(满足限制情况下),一共可以加n次. 我们来建立DP的维度,首先第一个i表示对二进制数处理到i位(从低位到高位),j表示使用了几个数(一共n个数可使用),为了满足题目要求,我们还要设置一个k表示此时的二进制一共有多少个1(题目要求不超过K),可能还会有进位的情况,再加一个p表示要向下一位进位的个数. 于是就有f[i][j][k][p](表示这四维状态下的…