-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathweek8.py
More file actions
52 lines (49 loc) · 1.63 KB
/
Copy pathweek8.py
File metadata and controls
52 lines (49 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# # k.povasin@innopolis.university
# # Идея решения была взята из лекции неделя 8 слайд 15
# MOD = 10**9 + 7
# N, K = map(int, input().split())
# mass = [0] * (N + 1)
# mass[1] = 1
# qount = mass[1]
# for i in range(2, N + 1):
# mass[i] = qount
# qount = (qount + mass[i]) % MOD
# if i >= K:
# qount = (qount - mass[i - K]) % MOD
# print(mass[-1])
# k.povasin@innopolis.university
# Идея решения была взята из лекции неделя 8 слайд 25
n = int(input())
mass = list(map(int, input().split()))
dp = [[0]*n for i in range(n)]
for i in range(n):
dp[i][i] = mass[i] * n
for length in range(2, n + 1):
for l in range(0, n-length+1):
r = l+length-1
year = n-(r-l)
left=mass[l]*year+dp[l+1][r]
right=mass[r]*year+dp[l][r-1]
dp[l][r] = max(left, right)
print(dp[0][n-1])
def bestTime(N,T,O):
dp = [ [0]*T for _ in range(N) ]
bread = [ [0]*T for _ in range(N) ]
for task in range(1,T):
for note in range(T,N):
bestTimeHere = 10**5
bestUsel = 0
for usel in range(note-(task-1)):
check = dp[task-1][note-usel] + O[task][note]
if check < bestTimeHere:
bestTimeHere = check
bestUsel = usel
dp[task][note] = bestTimeHere
bread = bestUsel
result = []
for task in range(T,1,-1):
ost=N
bread[task][ost]
result.append(bread[task][N])
ost-=bread[task][ost]
return (dp[T][N], result)