Skip to content

Commit d4d3cba

Browse files
Add files via upload
1 parent cec10c9 commit d4d3cba

3 files changed

+92
-0
lines changed
+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import sys
2+
3+
import numpy as np
4+
5+
6+
def optimal_weight(W, w):
7+
# write your code here
8+
9+
matrix = np.zeros(shape=(len(w), W + 1), dtype=int)
10+
11+
for j in range(0, len(w)):
12+
for i in range(1, W + 1):
13+
if w[j] > i:
14+
matrix[j, i] = matrix[j - 1, i]
15+
else:
16+
matrix[j, i] = max(w[j] + matrix[j - 1, i - w[j]], matrix[j - 1, i])
17+
return matrix[len(w) - 1, W]
18+
19+
20+
if __name__ == '__main__':
21+
input = sys.stdin.read()
22+
W, n, *w = list(map(int, input.split()))
23+
print(optimal_weight(W, w))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
from math import inf
2+
3+
import numpy as np
4+
5+
6+
def evalt(a, b, op):
7+
if op == '+':
8+
return a + b
9+
elif op == '-':
10+
return a - b
11+
elif op == '*':
12+
return a * b
13+
else:
14+
assert False
15+
16+
17+
def min_and_max(m, M, op, i, j):
18+
tmp_min = inf
19+
tmp_max = -inf
20+
21+
for k in range(i, j):
22+
a = evalt(M[i][k], m[k + 1][j], op[k])
23+
b = evalt(m[i][k], m[k + 1][j], op[k])
24+
c = evalt(M[i][k], M[k + 1][j], op[k])
25+
d = evalt(m[i][k], M[k + 1][j], op[k])
26+
27+
tmp_min = min(tmp_min, a, b, c, d)
28+
tmp_max = max(tmp_max, a, b, c, d)
29+
30+
return (tmp_min, tmp_max)
31+
32+
33+
def get_maximum_value(dataset):
34+
op = dataset[1:len(dataset):2]
35+
d = dataset[0:len(dataset) + 1:2]
36+
n = len(d)
37+
m = np.zeros(shape=(n, n), dtype=int)
38+
M = np.zeros(shape=(n, n), dtype=int)
39+
for i in range(n):
40+
m[i][i] = int(d[i])
41+
M[i][i] = int(d[i])
42+
43+
for s in range(1, n):
44+
for i in range(n - s):
45+
j = i + s
46+
m[i][j], M[i][j] = min_and_max(m, M, op, i, j)
47+
return M[0][n - 1]
48+
49+
50+
if __name__ == "__main__":
51+
print(get_maximum_value(input()))

Week 6/Partitioning_souvenirs.py

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import sys
2+
import itertools
3+
4+
def partition3(A):
5+
for c in itertools.product(range(3), repeat=len(A)):
6+
sums = [None] * 3
7+
for i in range(3):
8+
sums[i] = sum(A[k] for k in range(len(A)) if c[k] == i)
9+
10+
if sums[0] == sums[1] and sums[1] == sums[2]:
11+
return 1
12+
13+
return 0
14+
15+
if __name__ == '__main__':
16+
input = sys.stdin.read()
17+
n, *A = list(map(int, input.split()))
18+
print(partition3(A))

0 commit comments

Comments
 (0)