目录
1.1050. 鸣人的影分身 - AcWing题库
k=int(input())
for _ in range(k):
m,n=map(int,input().split())
dp=[[0 for i in range(m+1)]for j in range(n+1)]
for i in range(n+1):
dp[i][0]=1
for i in range(1,n+1):
for j in range(1,m+1):
dp[i][j]+=dp[i-1][j]
if j>=i:
dp[i][j]+=dp[i][j-i]
print(dp[-1][-1])
2.1047. 糖果 - AcWing题库
一开始必须全部初始化成一个很小的数,否则会出错的
n,k=map(int,input().split())
a=[0]
for i in range(n):
a.append(int(input()))
dp=[[-1<<31 for i in range(k+1)]for j in range(n+1)]
dp[0][0]=0
for i in range(1,n+1):
for j in range(k):
dp[i][j]=max(dp[i-1][j],a[i]+dp[i-1][(j-a[i])%k])
print(dp[-1][0])
3.1222. 密码脱落 - AcWing题库
s=input()
n=len(s)
dp=[[0 for i in range(n)]for j in range(n)]
for len in range(1,n+1):
for l in range(n):
if l+len-1>=n:
break
else:
if len==1:
dp[l][l]=1
else:
r=l+len-1
if s[l]==s[r]:
dp[l][r]=2+dp[l+1][r-1]
dp[l][r]=max(dp[l][r],dp[l+1][r],dp[l][r-1])
print(n-dp[0][n-1])
4.1220. 生命之树 - AcWing题库
n=int(input())
m=2*(n+1)
h=[-1 for i in range(n+1)]
e=[0 for i in range(m)]
ne=[0 for i in range(m)]
idx=0
def add(a,b):
global idx
e[idx]=b
ne[idx]=h[a]
h[a]=idx
idx+=1
def dfs(u,father):
f[u]=t[u]
i=h[u]
while i!=-1:
j=e[i]
if j!=father:
dfs(j,u)
f[u]+=max(0,f[j])
i=ne[i]
t=[0]+list(map(int,input().split()))
for i in range(n-1):
a,b=map(int,input().split())
add(a,b)
add(b,a)
f=[0 for i in range(n+1)]
dfs(1,-1)
res=max(f[1:])
print(res)