while True:
n = int(input())
arr = []
for i in range(n):
arr.append(list(map(int, input().split())))
dp = [[0] * n for i in range(n)]
memo = [[-1] * n for i in range(n)]
for i in range(n):
for j in range(i + 1):
if memo[i][j] != -1:
dp[i][j] = memo[i][j]
elif i == 0:
dp[i][j] = arr[i][j]
memo[i][j] = dp[i][j]
else:
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1]) + arr[i][j]
memo[i][j] = dp[i][j]
print(max(dp[-1]))
while True:
n = int(input())
arr = []
for i in range(n):
arr.append(list(map(int, input().split())))
dp = [[0] * n for i in range(n)]
for i in range(n):
for j in range(i+1):
if i == 0:
dp[i][j] = arr[i][j]
else:
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1]) + arr[i][j]
print(max(dp[-1]))
基础的dp
while True:
n, m = map(int, input().split())
dp = [[0] * m for i in range(n)]
for i in range(n):
for j in range(m):
if i == 0 or j == 0:
dp[i][j] = 1
else:
dp[i][j] = (dp[i - 1][j] + dp[i][j - 1])%int((1e9+7))
print(dp[-1][-1])
构造一个二维数组填表就能看出来
while True:
n = input()
if len(n)==0:
continue
n = int(n)
arr = []
for i in range(n):
arr.append(list(map(int, input().split())))
dp = [[0] * (2 * n - 1) for i in range(n)]
for i in range(n):
for j in range(2 * i + 1):
if i == 0:
dp[i][j] = arr[i][j]
else:
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1], dp[i - 1][j - 2]) + arr[i][j]
print(max(dp[-1]))
数字三角形的变形
while True:
n, m = map(int, input().split())
arr = []
for i in range(n):
arr.append(list(map(int, input().split())))
dp = [[0] * m for i in range(n)]
for i in range(n):
for j in range(m):
if i == 0:
dp[i][j] = arr[i][j]
else:
if j+1<m:
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1], dp[i - 1][j + 1]) + arr[i][j]
else:
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1]) + arr[i][j]
print(max(dp[-1]))
考虑边界
while True:
t = int(input())
for _ in range(t):
n, m = map(int, input().split())
a = [[0] * (m + 1) for _ in range(n + 1)]
dp = [[0] * (m + 1) for _ in range(n + 1)]
for i in range(1, n + 1):
row = list(map(int, input().split()))
for j in range(1, m + 1):
a[i][j] = row[j - 1]
if j == 1:
dp[i][j] = dp[i - 1][j] + a[i][j]
if i == 1:
dp[i][j] = dp[i][j - 1] + a[i][j]
for i in range(2, n + 1):
for j in range(2, m + 1):
dp[i][j] = min(dp[i][j - 1], dp[i - 1][j]) + a[i][j]
print(dp[-1][-1])
注意边界处理就行了
while True:
n=input()
ans=[]
for i in range (1,len(n)//2):
if 'AB'*i in n:
ans.append(i)
print(max(ans)*2)
可以暴力查找