upd
This commit is contained in:
14
algorithms/labs/lab8/code/dp/1.py
Normal file
14
algorithms/labs/lab8/code/dp/1.py
Normal 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"]))
|
||||
18
algorithms/labs/lab8/code/dp/2.py
Normal file
18
algorithms/labs/lab8/code/dp/2.py
Normal 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))
|
||||
14
algorithms/labs/lab8/code/dp/3.py
Normal file
14
algorithms/labs/lab8/code/dp/3.py
Normal 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))
|
||||
Reference in New Issue
Block a user