This commit is contained in:
nik
2025-10-01 22:55:09 +03:00
parent 4d0ece634b
commit 74e98c37c4
591 changed files with 20286 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
def word_break(s, wordDict):
dp = [True] + [False] * len(s)
for i in range(1, len(s) + 1):
for w in wordDict:
j = i - len(w)
if j >= 0 and dp[j] and s[j:i] == w:
dp[i] = True
break
return dp[-1]
if __name__ == "__main__":
print(word_break("applepenapple", ["apple", "pen"]))
print(word_break("catsandog", ["cats", "dog", "sand", "and", "cat"]))

View File

@@ -0,0 +1,18 @@
def min_cost_to_win(n):
dp = [[0] * (n + 2) for _ in range(n + 2)]
for length in range(2, n + 1):
for i in range(1, n - length + 2):
j = i + length - 1
best = 10**9
for p in range(i, j + 1):
left = dp[i][p - 1] if p > i else 0
right = dp[p + 1][j] if p < j else 0
best = min(best, p + max(left, right))
dp[i][j] = best
return dp[1][n]
if __name__ == "__main__":
print(min_cost_to_win(1))
print(min_cost_to_win(2))
print(min_cost_to_win(10))

View File

@@ -0,0 +1,14 @@
def find_max_form(strs, m, n):
dp = [[0] * (n + 1) for _ in range(m + 1)]
for s in strs:
z = s.count("0")
o = len(s) - z
for i in range(m, z - 1, -1):
for j in range(n, o - 1, -1):
dp[i][j] = max(dp[i][j], dp[i - z][j - o] + 1)
return dp[m][n]
if __name__ == "__main__":
print(find_max_form(["10", "0001", "111001", "1", "0"], 5, 3))
print(find_max_form(["10", "0", "1"], 1, 1))