为什么D题使用@cache + dfs 过不了
@cache + dfs的递归和递推在复杂度上是等效的吧?
from math import sqrt, log, gcd, inf
# from math import isqrt #pypy 无
from operator import ixor, and_
from random import randint
from string import ascii_lowercase
from typing import List
from heapq import *
from collections import *
from bisect import *
from itertools import *
from functools import lru_cache
from copy import *
import sys
sys.setrecursionlimit(1500000) #pypy卡这个...
input = lambda: sys.stdin.readline().rstrip()
il = lambda: list(map(int, input().split()))
ix = lambda: il()[0]
iis = lambda: input().split()
printt = print
print = lambda a: printt(" ".join(map(str, a))) if isinstance(a, list) else printt(a)
def pairwise(a):
ans = []; n = len(a)
for i in range(n - 1): ans += (a[i], a[i + 1]),
return ans
py = lambda: print("YES")
pn = lambda: print("NO")
mod = 998244353 #ac
# mod = 10**9 + 7
'''代码'''
# mod ↑
times = 1 # 0有t, 1无t
if not times:
times = ix()
for _ in range(times):
n,mn,mx = il()
s= input()
c0 , c1 = [0], [0]
for x in s:
c0 += c0[-1] + (x == "0"),
c1 += c1[-1] + (x == "1"),
# print([c0,c1])
n = len(s)
@lru_cache(maxsize=None)
def dfs(l=0, r=n - 1):
# if l == r: return 0
ans = 0
for i in range(l + 1, r + 1):
if mn <= abs(c0[i] - c0[l] - (c1[r + 1] - c1[i])) <= mx:
t = dfs(l, i - 1) + dfs(i, r) + 1
if t > ans : ans = t
# ans = max(ans, dfs(l, i - 1) + dfs(i, r) + 1)
return ans
ans = dfs()
# dfs.cache_clear()
print(ans)
# code ↑
'''test
3
1 1
2 2
9982 44353
'''
