如题,我之前写了一个要分成k个子集的题目,思路是:dfs+状态压缩+记忆化搜索,于是我依葫芦画瓢,写了下面这段代码:
class Solution:
def makesquare(self, matchsticks: List[int]) -> bool:
all_sum = sum(matchsticks)
if all_sum%4!=0:return False
n = len(matchsticks)
per = all_sum//4
matchsticks.sort()
if matchsticks[-1]>per:return False
@cache
def dfs(s,p,k):
if s==(1<<n-1) and k==4:return True
for i in range(n):
if p+matchsticks[i]>per:break
cursum = (p+matchsticks[i])%per
if s&(1<<i)==0 and dfs(s^(1<<i),cursum,k+(1 if cursum==0 else 0)):return True #增加了最后这个k参数
return False
return dfs(0,0,0)这段代码的主要内容和之前提到的那个题目差不多,但是我针对这个题目改了一下,增加了一个参数,用于记录一共分了多少组。我觉得我的思路没问题,但是运行起来就不对。我的想法是写一段能够判断“是否能够划分成k个相等和的子集并且记录k的值”,对于这个题目来说,判断k是否等于4。求各路大神棒棒忙看看哪里有问题?