재밌는 계단수들

This commit is contained in:
2020-08-13 01:49:19 +09:00
parent 811f86e100
commit 5d81c15a86
5 changed files with 58 additions and 38 deletions

View File

@@ -0,0 +1,18 @@
N, K = map(int, input().split())
Ws = [tuple(map(int, input().split())) for i in range(N)] # weight, value
D = [[0] * (K + 1) for _ in range(N + 1)]
def solve(k):
global D
for n in range(1, N + 1):
for k in range(1, K + 1):
if Ws[n - 1][0] <= k:
D[n][k] = max(Ws[n - 1][1] + D[n - 1][k - Ws[n - 1][0]], D[n - 1][k])
else:
D[n][k] = D[n - 1][k]
return D[N][K]
print(solve(K))

View File

@@ -0,0 +1,17 @@
N = int(input())
D = [[0] * (1 << 10) for _ in range(10)]
for i in range(1, 10):
D[i][1 << i] = 1
for i in range(0, N - 1):
Dn = [[0] * (1 << 10) for _ in range(10)]
for n in range(10):
for m in range(1024):
if n < 9:
Dn[n][m | (1 << n)] += D[n + 1][m] % 1000000000
if n > 0:
Dn[n][m | (1 << n)] += D[n - 1][m] % 1000000000
D = Dn
print(sum([D[i][1023] for i in range(10)]) % 1000000000)

View File

@@ -0,0 +1,23 @@
N = int(input())
Mem = [[[-1] * 5 for _ in range(0, 10)] for _ in range(N)]
def I(l, k, b):
if b > 2 or b < -2:
return 0
if l == 0:
return 1
if Mem[l - 1][k][b] != -1:
return Mem[l - 1][k][b]
re = 0
if 0 < k:
re += I(l - 1, k - 1, b - 1 if b < 0 else -1) % 1000000007
if k < 9:
re += I(l - 1, k + 1, b + 1 if b > 0 else 1) % 1000000007
Mem[l - 1][k][b] = re
return re
print(sum(I(N - 1, i, 0) for i in range(0, 10)) % 1000000007)